我有一个包含 std::vector 的简单类,我希望在按值返回类时受益于移动语义(而不是 RVO)。
我通过以下方式实现了移动构造函数、复制构造函数和复制赋值运算符:
class A
{
public:
// MOVE-constructor.
A(A&& other) :
data(std::move(other.data))
{
}
// COPY-constructor.
A(const A& other) :
data(other.data)
{
}
// COPY-ASSIGNMENT operator.
A& operator= (const A& other);
{
if(this != &other)
{
data = other.data;
}
return *this;
}
private:
std::vector<int> data;
};
上述实现是否正确?
还有一个问题:我什至必须实现这些成员中的任何一个,还是它们是由编译器自动生成的?我知道复制构造函数和复制赋值运算符是默认生成的,但是编译器也可以自动生成移动构造函数吗?(我用 MSVC 和 GCC 编译这段代码。)
在此先感谢您的任何建议。(我知道已经有一些类似的问题,但不适用于这种确切的情况。)