c ++ 11標準によると、デフォルトの移動コンストラクターは次の場合にのみ生成されます。
- Xには、ユーザーが宣言したコピーコンストラクターがなく、
- Xには、ユーザーが宣言したコピー代入演算子がありません。
- Xには、ユーザーが宣言したムーブ代入演算子がありません。
- Xには、ユーザーが宣言したデストラクタがなく、
- 移動コンストラクターは、削除済みとして暗黙的に定義されません。
それでも明示的にデフォルト設定できますか?clangで正しく動作するようです。たとえば、次のようになります。
class MyClass {
private:
std::vector<int> ints;
public:
MyClass(MyClass const& other) : ints(other.ints) {}
MyClass(MyClass&& other) = default;
};