移动作业
类似于我们如何使用左值引用为对象赋值,复制它,我们也可以将值从一个对象移动到另一个对象而不构造一个新对象。我们称之为移动分配。我们将值从一个对象移动到另一个现有对象。
为此,我们将不得不重载 operator =
,而不是像它在副本赋值中那样采用左值引用,但是它需要一个右值引用。
class A {
int a;
A& operator= (A&& other) {
this->a = other.a;
other.a = 0;
return *this;
}
};
这是定义移动分配的典型语法。我们重载 operator =
,以便我们可以为它提供一个右值引用,它可以将它分配给另一个对象。
A a;
a.a = 1;
A b;
b = std::move(a); //calling A& operator= (A&& other)
std::cout << a.a << std::endl; //0
std::cout << b.a << std::endl; //1
因此,我们可以将对象分配给另一个对象。