移動操作の自動生成
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 サイトの他の関連記事を参照してください。