移動語義

移動語義是一種在 C++中將一個物件移動到另一個物件的方法。為此,我們清空舊物件並將其中的所有內容放在新物件中。

為此,我們必須瞭解右值引用是什麼。右值引用(T&&,其中 T 是物件型別)與普通引用(T&,現在稱為左值引用)沒有太大區別。但它們充當兩種不同的型別,因此,我們可以建立採用一種型別或另一種型別的建構函式或函式,這在處理移動語義時是必需的。

我們需要兩種不同型別的原因是指定兩種不同的行為。左值引用建構函式與複製有關,而右值引用建構函式與移動有關。

要移動物件,我們將使用 std::move(obj)。此函式返回物件的右值引用,以便我們可以將該物件的資料竊取到新物件中。有幾種方法可以實現,下面將對此進行討論。

需要注意的是,使用 std::move 只會建立一個右值參考。換句話說,語句 std::move(obj) 不會改變 obj 的內容,而 auto obj2 = std::move(obj)(可能)會改變。