右值引用和完美转发,浅拷贝,深拷贝,移动

右值引用

  • 右值引用为什么重要呢,其是STL标准库效率提升的利器,当然你需要理清楚当前数据是否为右值,或是当前其为一个左值,但后序都不会再用到它,我们利用move转换为右值进行资源转移(这还需要右值拷贝函数的支持)
  • 支持拷贝构造和右值拷贝构造,来支持STL中的高效处理
  • 主要突破点
  1. 资源的转移(new,unique_ptr管理的)
  2. 将亡值
    在这里插入图片描述
copy and move

以string来说,其成员数据有一个指针,其指向一个堆

深拷贝
  • 当存在指针时,一定需要拷贝构造函数和赋值完成深拷贝
    在这里插入图片描述
浅拷贝
  • 浅拷贝按位拷贝---->对其类数据成员进行拷贝
    在这里插入图片描述
移动

在这里插入图片描述

  • 移动拷贝函数和移动赋值函数需要利用noexcept关键字修饰
折叠引用

完美转发forward

  • 其引入是由于引入了右值意义,当经过函数的转发,右值在函数参数传递过程中会丢失其语义(右值变为左值)
    可见,完美转发是解决右值在中介者参数传递的痛点,中介者作为一个转发者

A->右值函数B->右值函数C
B需要保证A传给其右值语义,那么传给C时就需要完美转发,相当于包装箱咯,以此正确调用右值函数C

右值在STL中的运用

  • 当容器需要被copy时,若vector扩容时,若存在移动拷贝函数,其就会优先进行使用,来节省拷贝的开销
  • 使用move后,不能在使用被移动的资源,否则会造成不可预知的后果
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值