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

C++move的作用和原理

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

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

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


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

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

 总结:

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

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

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

http://www.xdnf.cn/news/741.html

相关文章:

  • 2-6-1-1 QNX编程入门之进程和线程(八)
  • 手撕LLM(五):从源码出发,探索多模态VL模型的推理全流程
  • (二)mac中Grafana监控Linux上的MySQL(Mysqld_exporter)
  • SQL语句解析
  • 电解电容失效分析过程、失效分析报告
  • 软件架构师的“天、人、术、势“:构建未来系统的哲学框架
  • 立体匹配模型RAFT-Stereo的onnx导出与trt使用指南
  • 实战指南:封装Faster-Whisper为FastAPI接口并实现高并发处理-附整合包
  • 数据通信学习笔记之OSPF其他内容2
  • 读书笔记--MySQL索引
  • MQTT协议容错协议容错机制设计与实现
  • 京东百亿补贴杀入外卖市场:一场关乎即时零售未来的攻防战
  • 5G网络切片:精准分配资源,提升网络效率的关键技术
  • 测试环境凌晨2点负载偏高, 2点到7点 IO 读偏高问题定位
  • ASP.NET Core 最小 API:极简开发,高效构建(上)
  • DEA-Net:基于细节增强卷积和内容引导注意力的单图像去雾
  • 51c大模型~合集119
  • SpringBoot入门实战(第一篇:环境准备和项目初始化)
  • C语言求执行次数
  • 【算法笔记】如何优雅的进行字符串操作
  • 【英语语法】词法---形容词
  • 关于编译树莓派内核系统的总结
  • STM32基础教程——串口收发
  • 基于尚硅谷FreeRTOS视频笔记——11—RTOS获取源码及源码简介
  • 开发环境解决浏览器层面跨域问题
  • [Scade One] Swan 图形化建模技术的形式化文法
  • 如何快速的搭建可用的付费网盘站点,实现盈利:新版网盘系统源码,全新构架,局部新颖,功能齐全,可自用可运营,可正常用于生产,2025年搭建付费网盘系统首选!
  • python绘制正态分布和t分布图形
  • Spring 事务管理核心机制与传播行为应用
  • Keil MDK 编译问题:function “HAL_IncTick“ declared implicitly