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 の両方でコンパイルします。)
ご提案いただきありがとうございます。(すでに同様の質問がいくつかあることは知っていますが、この正確なシナリオではありません。)