ホームページ > バックエンド開発 > C++ > 移動コンストラクターと移動代入演算子はいつ C で自動的に生成されますか?

移動コンストラクターと移動代入演算子はいつ C で自動的に生成されますか?

Patricia Arquette
リリース: 2024-11-28 05:23:13
オリジナル
948 人が閲覧しました

When Are Move Constructors and Move Assignment Operators Automatically Generated in C  ?

C での移動演算の生成

C 98 では、カスタム定義のないクラスに対してコピー コンストラクターと代入演算子が自動的に生成されました。ただし、C 11 での移動セマンティクスの導入により、移動操作の生成についてはさらに考慮する必要があります。

移動操作の自動生成

移動コンストラクターと移動代入演算子特定の条件が満たされた場合にのみ自動的に生成されます:

  • デフォルトの動きセマンティクス: コンパイラは、オブジェクトのデータ メンバーのビット単位の移動を実行する移動操作を生成します。
  • ユーザー定義のデストラクターなし: クラスにユーザー定義のデストラクターがある場合、コンパイラは移動操作を自動的に生成しません。
  • ユーザー定義のコピー操作はありません: 同様に、クラスにユーザー定義のコピー操作がある場合、コンパイラは移動操作を自動的に生成しません。

自動生成の例外

場合によっては、移動操作が発生することがあります。上記の条件を満たしていても自動生成されません。例:

  • 移動のみの型を持つクラス メンバー: クラスに移動のみの型 (つまり、コピーできない型) を持つメンバーが含まれている場合、コンパイラーは自動的に実行できません。移動操作を生成します。
  • 自明なクラス: 自明なデータ メンバーのみを持つクラス (例:整数、文字列) にはコピーおよび移動操作が暗黙的に定義されているため、コンパイラはカスタム実装を生成しません。

追加情報

ACCU からの Howard Hinnant のプレゼンテーション2014 年のカンファレンスでは、移動操作を含む特別なメンバーの自動生成のルールをまとめた包括的な表が提供されています。スライドでは、非推奨の動作が赤い四角で示されていることを強調しています。

移動セマンティクスが正しく処理されるようにするには、C 98/03 の「3 のルール」に従うことをお勧めします。これは、デストラクターが宣言されている場合は両方のコピー メンバーを明示的に宣言するか、少なくとも 1 つのコピー メンバーを宣言することを意味します。

以上が移動コンストラクターと移動代入演算子はいつ C で自動的に生成されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート