左值引用与右值引用
1. RAII
运行时资源管理,离开作用域后对象自动调用析构函数。右值引用,可以将对象的生命周期延到作用范围之外。
2. 左值和右值
参考:左值和右值_左值和右值的区别-CSDN博客
前置运算符,一般都属于左值:++i,--i,解引用(*p)。
后置运算符,右值,i--(先取i,再i + 1,再return); a & b,位运算符,也是右值。
将亡值:可以出发移动构造函数,移动拷贝构造函数。
3. 左值引用和右值引用
(1)左值的引用,另外,const 左值引用可以引用右值。
(2)通过std::move对左右值进行相互转换。
【C++基础】std::move用法介绍-CSDN博客
(3)左值引用,主要为了避免对象的拷贝构造。
(4)右值引用,资源管理(避免深拷贝);STL应用,比如vector的emplace_back,也是避免了深拷贝;智能指针,方便资源管理。
(5)完美转发
本质是函数模板里,对对象的值和属性进行透传。这里还涉及了引用折叠规则:
C++概念:引用折叠、模板推导、通用引用 - imxiangzi - 博客园
参考:【【C++面试题】左值引用与右值引用的区别?右值引用的意义】 https://www.bilibili.com/video/BV1Kw4m1k7VC/?share_source=copy_web&vd_source=4429eec99a3a4922ca78501eb4607294