多くの STL コンテナーを保持する大きなクラスがあります。
コンパイラーは、これらのコンテナーをターゲットに移動するムーブ・コンストラクターを自動的に作成しますか、それとも自分で作成する必要がありますか?
11514 次
2 に答える
59
クラス X のムーブ コンストラクターは、次の場合にデフォルトとして暗黙的に宣言されます。
- X にはユーザー宣言のコピー コンストラクターがありません。
- X には、ユーザー宣言のコピー代入演算子がありません。
- X には、ユーザー宣言の移動代入演算子がありません。
- X にはユーザー宣言のデストラクタがなく、
- 移動コンストラクターは、暗黙的に削除済みとして定義されません。
たとえば、移動コンストラクターを持たないクラス型データ メンバーがクラスにある場合、コピー/移動コンストラクターが宣言されていなくても、クラスは移動コンストラクターを取得しません。削除済みとして定義されます (そのデータ メンバーのため)。
于 2011-11-27T12:19:09.093 に答える
3
デフォルトのムーブ コンストラクターは、通常、デフォルトのコピー コンストラクターに関連付けられています。もう一方を取得すると、一方が取得されます。ただし、コピー コンストラクター/代入演算子を記述した場合、既定のコピーおよび移動コンストラクター/代入演算子は記述されません。いずれかのセットを作成する場合は、それらすべてを作成する必要があります。
于 2011-11-27T04:18:16.390 に答える