在C++中的常見模式是使複製構造私人:是一個私人移動構造函數來防止移動?
class A
{
public:
// ...
private:
A(const A&);
};
但是將以下代碼然後編譯(在C++ 11/14):
A f();
auto a = f();
標準包含的信息關於自動生成移動構造函數。我既沒有訪問標準,也沒有實際生成移動構造函數的編譯器。我的問題是:是否必須寫
class A
{
public:
// ...
private:
A(const A&);
A(const A&&);
};
防止移動(以及操作員=類似)?
如果你寫了一個拷貝構造函數,它不會生成一個移動構造函數。 –
用戶聲明的副本禁止生成移動成員。 – Xeo
請注意,您提到的模式是針對C++ 98/03的,但現在在C++ 11中已棄用,這要感謝「delete」構造函數/賦值運算符(例如'ClassName(ClassName &&)= delete; '顯式地阻止隱式移動構造函數)。 – syam