跳至主要內容

移动赋值运算符

AkashiNeko原创C++右值运算符重载

移动赋值的功能

与拷贝赋值运算符、移动构造函数类似,移动赋值运算符是通过右值引用的方式将对象的资源移动给新对象。

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;
}