如何正确初始化容器属性避免重建包含的对象?
class BAR
{
...
};
class FOO
{
public:
FOO(FOO &&f)
{
// ????
}
std::vector<BAR> b;
};
如何正确初始化容器属性避免重建包含的对象?
class BAR
{
...
};
class FOO
{
public:
FOO(FOO &&f)
{
// ????
}
std::vector<BAR> b;
};
除非您有充分的理由这样做,否则只需遵循零规则并避免显式定义移动构造函数:编译器将为您隐式生成一个,并且该移动构造函数将执行类数据成员的成员移动。
如果您确实必须显式定义移动构造函数(例如,因为您使用的是 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))
{
}
但这不是必需的,正如其他人所指出的那样,它是隐式移动构造函数将为您生成。