移動作業

類似於我們如何使用左值引用為物件賦值,複製它,我們也可以將值從一個物件移動到另一個物件而不構造一個新物件。我們稱之為移動分配。我們將值從一個物件移動到另一個現有物件。

為此,我們將不得不過載 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

因此,我們可以將物件分配給另一個物件。