2013-05-20 40 views

回答

8

除非你有一個很好的理由這樣做,否則,只是follow the Rule of Zero,避免明確定義轉移構造函數:編譯器會爲您生成一個含蓄,而移動構造函數將執行類的成員,明智之舉數據成員。

如果你真的有明確定義轉移構造函數(例如,因爲使用的是MSVC,對於一些模糊的原因MSVC將從未爲您生成隱式轉移構造函數),做這種方式:

Foo(Foo&& f) : b(std::move(f.b)) { /* ... */ } 
2

見安迪的回答,但如果您需要:

class FOO 
{ 
public: 
    FOO(FOO &&f) : b(std::move(f.b)) 
    { 

    } 

    std::vector<BAR> b; 
}; 
1

這將是

FOO(FOO &&f): b(std::move(f.b)) 
{ 
} 

但正如其他人所指出的那樣,這並不是必要的,它是隱含的移動構造函數將爲您生成的。