对象移动
2023年12月30日 2024年1月1日
虽然iostream和unique_ptr将拷贝构造函数和拷贝赋值运算符定义为删除, 但是提供了移动构造函数和移动赋值运算符
标准库容器, string和shared_ptr同时支持拷贝和移动
右值引用
rvalue reference
绑定一个临时对象:
- 所引用的对象将要被销毁
- 该对象没有其他用户
我们可以自由地接管所引用对象的资源: 将一个右值引用的资源移动到另一个对象中
显式地将左值转换为对应的右值引用类型
std::move
- 将给定左值转换为右值
- 我们可以销毁一个移后源对象, 也可以赋予它新值, 但不能使用一个移后源对象的值
调用std::move之后, 不能对移后源对象的值做任何假设
示例
程序员自行保证: 除了对rr1赋值, 和销毁rr1外, 将不再使用它
1int &&rr1 = 5; 2int &&rr2 = std::move(rr1);