当前位置: 首页 > news >正文

C++move的作用和原理

1)move 是C++11引入的一个新特性,用来实现移动语义。它的主要作用是将对象的资源从一个对象转移到另一个对象,而无需进行深拷贝,减少了资源内存的分配,可提高性能。

2)std::move的作用只有一个,无论输入参数是左值还是右值,都强制转成右值。

3 move 转成右值有什么好处?
这就涉及到移动语义的概念,右值可以触发移动语义,那什么是移动语义?我们可以理解为在对象转换的时候,通过右值可以触发到类的移动构造函数或者移动赋值函数。
因为触发了移动构造函数或者 移动赋值函数,我们就默认,原对象后面已经不会再使用了(包括内部的某些内存),这样我们就可以在新对象中直接使用原对象的那部分内存,减少了数据的拷贝操作,昂贵的拷贝转为了廉价的移动,提升了程序的性能。


4)是不是std:move后的对象就没法使用了?
其实不是,还是取决于搭配的移动构造函数和移动赋值函数是如何实现的。
如果在移动构造函数+移动赋值函数中,还是使用了拷贝动作,那原对象还是可以使用的,见下面示例。

 如果我们在移动构造函数+移动赋值函数中,将原对象内部内存废弃掉,新对象使用原对象内存,那原对象的内存就不可以用了,示例代码如下:

 总结:

std::move 函数的作用是将参数强制转换为右值。而且,只是转换为右值,并不会对对象进行任何操作。

转换为右值可以触发移动语义,减少数据的拷贝操作,提升程序的性能。

在使用 std:move 函数后,原对象是否可以继续使用取决于移动构造函数和移动赋值函数的实现。

相关文章:

  • LeetCode每日一题4.20
  • 模拟实现memmove,memcpy,memset
  • iPhone 13P 换超容电池,一年实记的“电池循环次数-容量“柱状图
  • ebpf: CO-RE, BTF, and Libbpf(三)
  • 标准的JNI (Java Native Interface) 加载函数 JNI_OnLoad
  • VLC搭建本机的rtsp直播推流和拉流
  • 如何成为Agent工程师:学习路径、核心技能与职业规划
  • 深入剖析 MySQL 中用户授权机制及操作
  • 指针(3)
  • 【上位机——MFC】MFC入门
  • day 22 作业
  • 实战指南:封装Faster-Whisper为FastAPI接口并实现高并发处理-附整合包
  • SAP PO开发-端到端配置
  • 2.1 基于委托的异步编程方法
  • SSRF学习
  • Spring 01
  • 9、Hooks:现代魔法咒语集——React 19 核心Hooks
  • 数字系统与编码
  • 计算机组成原理笔记(十六)——4.1基本算术运算的实现
  • Java Streams 使用教程
  • 北美票房|《罪人》成首部观众评分为A级的恐怖片
  • 南京信息工程大学商学院讲师李玮玮逝世,终年45岁
  • 美伊第二轮核问题间接谈判结束,伊方称“结果是建设性的”
  • 云南省交通发展投资有限责任公司原党委书记、董事长陈以东接受审查调查
  • 拒绝“假期刺客”,澎湃启动“五一”消费维权线索征集
  • 外交部:中国将深化同柬埔寨等周边国家友好合作,携手推进亚洲现代化进程