39

多くの STL コンテナーを保持する大きなクラスがあります。
コンパイラーは、これらのコンテナーをターゲットに移動するムーブ・コンストラクターを自動的に作成しますか、それとも自分で作成する必要がありますか?

4

2 に答える 2

59

クラス X のムーブ コンストラクターは、次の場合にデフォルトとして暗黙的に宣言されます。

  • X にはユーザー宣言のコピー コンストラクターがありません。
  • X には、ユーザー宣言のコピー代入演算子がありません。
  • X には、ユーザー宣言の移動代入演算子がありません。
  • X にはユーザー宣言のデストラクタがなく、
  • 移動コンストラクターは、暗黙的に削除済みとして定義されません。

たとえば、移動コンストラクターを持たないクラス型データ メンバーがクラスにある場合、コピー/移動コンストラクターが宣言されていなくても、クラスは移動コンストラクターを取得しません。削除済みとして定義されます (そのデータ メンバーのため)。

于 2011-11-27T12:19:09.093 に答える
3

デフォルトのムーブ コンストラクターは、通常、デフォルトのコピー コンストラクターに関連付けられています。もう一方を取得すると、一方が取得されます。ただし、コピー コンストラクター/代入演算子を記述した場合、既定のコピーおよび移動コンストラクター/代入演算子は記述されません。いずれかのセットを作成する場合は、それらすべてを作成する必要があります。

于 2011-11-27T04:18:16.390 に答える