如何正確初始化容器屬性,避免重建包含的對象?移動構造函數:如何處理容器屬性?
class BAR
{
...
};
class FOO
{
public:
FOO(FOO &&f)
{
// ????
}
std::vector<BAR> b;
};
如何正確初始化容器屬性,避免重建包含的對象?移動構造函數:如何處理容器屬性?
class BAR
{
...
};
class FOO
{
public:
FOO(FOO &&f)
{
// ????
}
std::vector<BAR> b;
};
除非你有一個很好的理由這樣做,否則,只是follow the Rule of Zero,避免明確定義轉移構造函數:編譯器會爲您生成一個含蓄,而移動構造函數將執行類的成員,明智之舉數據成員。
如果你真的有明確定義轉移構造函數(例如,因爲使用的是MSVC,對於一些模糊的原因MSVC將從未爲您生成隱式轉移構造函數),做這種方式:
Foo(Foo&& f) : b(std::move(f.b)) { /* ... */ }
見安迪的回答,但如果您需要:
class FOO
{
public:
FOO(FOO &&f) : b(std::move(f.b))
{
}
std::vector<BAR> b;
};
這將是
FOO(FOO &&f): b(std::move(f.b))
{
}
但正如其他人所指出的那樣,這並不是必要的,它是隱含的移動構造函數將爲您生成的。