我想實現一個沒有複製構造函數的類的移動構造函數。我得到一個錯誤,該類的成員的默認構造函數丟失。爲什麼移動構造函數需要其成員的默認構造函數?
這裏有一個簡單的例子來說明這一點:
struct A {
public:
A() = delete;
A(A const&) = delete;
A(A &&a) {}
};
struct B {
A a;
B() = delete;
B(B const&) = delete;
B(B &&b) {}
};
嘗試編譯,我得到:
move_without_default.cc: In constructor ‘B::B(B&&)’:
move_without_default.cc:15:11: error: use of deleted function ‘A::A()’
B(B &&b) {}
^
move_without_default.cc:6:2: note: declared here
A() = delete;
^
爲什麼這是一個錯誤?任何方式呢?
用'= default'替換'{}';' – cpplearner
因爲'A'的默認構造函數被刪除,但'B'使用它。 – tkausl
空移動構造函數不會自動嘗試執行逐個成員的移動。你的移動構造函數試圖默認構造'a',而不是移動 - 構造它。 – user2357112