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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-27 05:26:18354ブラウズ

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

移動操作の自動生成

C 11 では、移動セマンティクスの導入により、移動コンストラクターと移動代入が行われる状況について疑問が生じました。演算子は自動的に生成されます。

C 11 では、コピー コンストラクターやコピー代入のように、移動操作は自動的に生成されません。オペレーター。コンパイラーは、特定の条件が満たされた場合にのみ移動セマンティクスを生成します:

  • ユーザー定義のコピー コンストラクターまたはコピー代入演算子が存在しません。 これらのメンバーのいずれかが明示的に定義されている場合、移動は行われません。操作が生成されます。
  • ユーザー定義のデストラクターが定義されていません。 デストラクターの定義移動セマンティクスの生成を無効にします。
  • クラスにはコピー不可能なメンバーがありません。 動的に割り当てられたメモリへのポインターなど、クラスに移動できないメンバーが含まれている場合、移動操作は生成されません.

これらのルールを理解すると、移動セマンティクスを利用するクラスの実装をガイドするのに役立ちます。 Howard Hinnant のプレゼンテーションの表は、移動操作を含む特殊メンバーの自動生成の簡潔な概要を示しています。

Declaration Copy Constructor Copy Assignment Operator Move Constructor & Move Assignment Operator
None Generated Generated Not Generated
Copy Constructor Not Generated Generated Not Generated
Copy Assignment Operator Not Generated Not Generated Not Generated
Move Constructor Not Generated Not Generated Not Generated
Move Assignment Operator Not Generated Not Generated Not Generated
Destructor Not Generated Not Generated Not Generated
Copy Constructor & Copy Assignment Operator Not Generated Not Generated Not Generated
Copy Constructor & Move Constructor Not Generated Not Generated Not Generated
Copy Constructor & Move Assignment Operator Not Generated Not Generated Not Generated
Copy Assignment Operator & Move Constructor Not Generated Not Generated Not Generated
Copy Assignment Operator & Move Assignment Operator Not Generated Not Generated Not Generated
Move Constructor & Destructor Not Generated Not Generated Not Generated
Move Assignment Operator & Destructor Not Generated Not Generated Not Generated
Copy Constructor & Copy Assignment Operator & Move Constructor Not Generated Not Generated Not Generated
Copy Constructor & Copy Assignment Operator & Move Assignment Operator Not Generated Not Generated Not Generated
Copy Constructor & Move Constructor & Move Assignment Operator Not Generated Not Generated Generated
Copy Assignment Operator & Move Constructor & Move Assignment Operator Not Generated Not Generated Generated

これらのルールを認識することで、開発者はクラスが移動セマンティクスを適切に利用し、最適な効率を達成できるようになります。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。