1. RAII
运行时资源管理,离开作用域后对象自动调用析构函数。右值引用,可以将对象的生命周期延到作用范围之外。
2. 左值和右值
前置运算符,一般都属于左值:++i,--i,解引用(*p)。
后置运算符,右值,i--(先取i,再i + 1,再return); a & b,位运算符,也是右值。
将亡值:可以出发移动构造函数,移动拷贝构造函数。
3. 左值引用和右值引用
(1)左值的引用,另外,const 左值引用可以引用右值。
(2)通过std::move对左右值进行相互转换。
(3)左值引用,主要为了避免对象的拷贝构造。
(4)右值引用,资源管理(避免深拷贝);STL应用,比如vector的emplace_back,也是避免了深拷贝;智能指针,方便资源管理。
(5)完美转发
本质是函数模板里,对对象的值和属性进行透传。这里还涉及了引用折叠规则: