私はたくさんのSTLコンテナを持っている大きなクラスを持っています。
コンパイラーは、それらのコンテナーをターゲットに移動する移動コンストラクターを自動的に作成しますか、それとも自分で作成する必要がありますか?
クラスXの移動コンストラクターは、次の場合にデフォルトとして暗黙的に宣言されます。
- Xには、ユーザーが宣言したコピーコンストラクターがありません。
- Xには、ユーザーが宣言したコピー代入演算子がありません。
- Xには、ユーザーが宣言したムーブ代入演算子がありません。
- Xには、ユーザーが宣言したデストラクタがなく、
- 移動コンストラクターは、削除済みとして暗黙的に定義されません。
したがって、たとえば、クラスに移動コンストラクターを持たないクラスタイプのデータメンバーがある場合、暗黙的に宣言された移動コンストラクターが宣言されているため、コピー/移動コンストラクターが宣言されていなくても、クラスは移動コンストラクターを取得しません。削除済みとして定義されます(そのデータメンバーのため)。
デフォルトの移動コンストラクターは、通常、デフォルトのコピーコンストラクターに関連付けられています。あなたが他を得るときあなたは1つを得る。ただし、コピーコンストラクター/代入演算子を作成する場合、デフォルトのコピーは作成されませんおよび移動コンストラクター/代入演算子は作成されません。いずれかのセットのいずれかを作成する場合は、それらすべてを作成する必要があります。