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

c++11——移动语义的举例说明

目录

一、移动语义(进行资源的转移)

1.定义

2.实现方式

二、右值和右值引用

1.右值

2.右值引用(&&)

三、移动构造函数

四、移动赋值运算符

五、std::move() 函数

1.本质

2.强调


一、移动语义(进行资源的转移)

1.定义

是一种优化技术,核心是将资源的所有权从一个对象转移到另外一个对象,而不必进行代价高昂的深拷贝操作,避免不必要的内存分配和数据复制。

2.实现方式

通过右值引用和移动构造函数/移动赋值运算符实现。也就是说:

移动语义需要满足两个条件:

①转化为右值引用

②存在移动构造函数/移动赋值运算符。

二、右值和右值引用

1.右值

指表达式结束后就不再存在的临时对象。不能对右值取地址。

右值又分为:纯右值(字面常量)和将亡值。

2.右值引用(&&)

右值引用是对右值的引用,使用&&表示,允许捕获并操作临时象。

三、移动构造函数

移动构造函数允许对象在创建时接管另一个对象的资源。

以MyString类为例,解释移动构造函数:

①先将s1(左值)通过std::move()强制转换为右值引用;

②然后调用对象的移动构造函数,实现资源的转移。

四、移动赋值运算符

移动赋值运算符允许对象在赋值时接管另一个对象的资源。

(1)以MyString类为例,解释移动赋值运算符:

①先将s1(左值)通过std::move()强制转换为右值引用;

②然后调用对象的移动赋值运算符,将堆区中的资源移动给另外一个对象,实现资源的转移。

(2)从下图也可以发现:

采用深赋值的方式(s2=s1),需要先将原本的堆空间进行释放,释放后又需要在堆区中重新开辟一块内存,而采用移动赋值(s3=std::move(s1))可以减少对堆区的操作。

五、std::move() 函数

1.本质

是C++标准库中的一个工具,核心作用是将左值强制转换为右值引用。

本质是一个类型转换函数,无论参数原本是左值还是右值,都会被转换为右值引用

注意:std::move本身并不执行移动操作,移动操作发生在后续调用的移动构造函数或移动赋值运算符中。

2.强调

std::move()函数不能将const对象转换为右值引用。

原因:

如果对象本身是const,转化后类型变为const T&&(常量右值引用),而移动构造函数/赋值运算符需要修改源对象的状态,要求参数通常是非const右值引用。因此无法调用移动操作。

当对 const 对象使用 std::move 时,编译器会选择 拷贝构造函数 而非移动构造函数(拷贝构造函数可以接受 const T& 参数)。

http://www.dtcms.com/a/276417.html

相关文章:

  • 数据结构与算法:逆元、除法同余和容斥原理
  • 指令微调时,也要考虑提示损失
  • Linux - 安全排查 3
  • 用 MATLAB 模拟传染病传播:从 SI 模型到 SIS 模型的可视化之旅
  • 【无标题】基于拓扑膨胀-收缩对偶性(TED),TED原理构建任意维度TQCD模型并推演宇宙可能性的完整方案:
  • 网络连接:拨号连接宽带PPPOE
  • 数据库索引创建与使用详细笔记
  • Linux的NetworkManager的nmcli配置网桥(bridge) 笔记250712
  • 【6.1.1 漫画分库分表】
  • 挖矿病毒判断与处理 - 入门
  • 26-计组-寻址方式
  • 暑假Python基础整理 -- 函数篇
  • 【6.1.2 漫画分布式事务技术选型】
  • 常用 pkill 命令速查表
  • CentOS 系统紧急恢复:从 lib64 目录崩溃到救援实战
  • vue3 canvas 选择器 Canvas 增加页面性能
  • 用FunctionCall实现文件解析(三):ChatOpenAI单例工厂
  • lnmp环境搭建
  • 使用Pycharm集成开发工具远程调试部署在虚拟机上的flask项目:超级详细的完整指南
  • springboot AOP面向切面编程
  • SpringAI实现聊天记录保存到MySQL
  • 连接池的核心接口和常用属性
  • ReentrantLock 源码解析与 AQS 扩展
  • 首次让机器人具备类人的「主动感知」能力
  • 淘宝商品评论API接口操作详解
  • oc分类和swift扩展有哪些区别
  • 火山引擎:字节跳动的技术赋能初解
  • AI智能体 | 使用Coze制作一键生成单词洗脑循环视频,一天批量生成100条视频不是梦!(附保姆级教程)
  • NW728NW733美光固态闪存NW745NW746
  • HashMap的原理