移動作業
類似於我們如何使用左值引用為物件賦值,複製它,我們也可以將值從一個物件移動到另一個物件而不構造一個新物件。我們稱之為移動分配。我們將值從一個物件移動到另一個現有物件。
為此,我們將不得不過載 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
因此,我們可以將物件分配給另一個物件。