移动赋值运算符
原创
移动赋值的功能
与拷贝赋值运算符、移动构造函数类似,移动赋值运算符是通过右值引用的方式将对象的资源移动给新对象。
class A {
public:
A& operator=(A&& a);
};
为了支持连续赋值操作,它和拷贝赋值运算符同样,在数据移动之前,先清空当前的数据,移动完成后返回自身的引用。
std::string 的移动赋值运算符
std::string s1 = "Hello, world";
std::string s2;
s2 = std::move(s1);
// move之后,s1 = "",s2 = "Hello, world";
移动赋值的实现
Stack类的移动赋值运算符
移动赋值运算符主要完成以下三个工作
- 清除当前管理的资源
- 移动资源
- 清空临时对象
Stack& operator=(Stack&& s) {
// 清空当前管理的资源
free(_data);
_data = nullptr;
// 移动资源
_capacity = s._capacity;
_top = s._top;
_data = s._data;
// 清空临时对象
s._top = s._capacity = 0;
s._data = nullptr;
}