右值引用
- 右值引用为什么重要呢,其是STL标准库效率提升的利器,当然你需要理清楚当前数据是否为右值,或是当前其为一个左值,但后序都不会再用到它,我们利用move转换为右值进行资源转移(这还需要右值拷贝函数的支持)
- 支持拷贝构造和右值拷贝构造,来支持STL中的高效处理
- 主要突破点
- 资源的转移(new,unique_ptr管理的)
- 将亡值
copy and move
以string来说,其成员数据有一个指针,其指向一个堆
深拷贝
- 当存在指针时,一定需要拷贝构造函数和赋值完成深拷贝
浅拷贝
- 浅拷贝按位拷贝---->对其类数据成员进行拷贝
移动
- 移动拷贝函数和移动赋值函数需要利用noexcept关键字修饰
折叠引用
完美转发forward
- 其引入是由于引入了右值意义,当经过函数的转发,右值在函数参数传递过程中会丢失其语义(右值变为左值)
可见,完美转发是解决右值在中介者参数传递的痛点,中介者作为一个转发者
A->右值函数B->右值函数C
B需要保证A传给其右值语义,那么传给C时就需要完美转发,相当于包装箱咯,以此正确调用右值函数C
右值在STL中的运用
- 当容器需要被copy时,若vector扩容时,若存在移动拷贝函数,其就会优先进行使用,来节省拷贝的开销
- 使用move后,不能在使用被移动的资源,否则会造成不可预知的后果