C++拷贝控制
Outline:
- 对象移动
- //TODO
对象移动
右值引用
左值引用绑定到返回
左值
的表达式右值引用或
const
的左值引用绑定到返回右值
的表达式右值要么是字面常量,要么是临时对象。右值引用只能绑定到右值,所以可以接管所引用对象的资源
- 所引用对象将要被销毁
- 该对象没有其它用户
变量是
左值
- 不能把
右值引用
直接绑定到一个变量,即使这个变量是右值引用类型
1
2int &&rr1 = 42;
int &&rr2 = rr1; //错误: rr1是右值引用类型的变量,它是个左值- 不能把
move()
将左值
转换为右值引用
.1
int && rr3 = std::move(rr1);
- 可以销毁移后源对象,可以赋予其新值,但不能使用移后源对象的值
- 对
move
不提供using
声明, 直接调用std::move
而非move
- 在头文件
<utility>
中
移动构造函数和移动赋值运算符
1 | class X |