移動操作の自動生成
C 11 では、移動セマンティクスの導入により、移動コンストラクターと移動代入が行われる状況について疑問が生じました。
C 11 では、コピー コンストラクターやコピー代入演算子のような移動操作は自動的に生成されません。コンパイラは、特定の条件が満たされた場合にのみ移動セマンティクスを生成します:
これらのルールを理解すると、移動セマンティクスを利用するクラスの実装をガイドするのに役立ちます。 Howard Hinnant のプレゼンテーションの表は、移動操作を含む特殊メンバーの自動生成の簡潔な概要を示しています。
Declaration | Copy Constructor | 代入演算子のコピー | コンストラクタの移動と代入の移動演算子 |
---|---|---|---|
なし | 生成されました | 生成されました | 生成されません |
コンストラクターをコピー | なし生成されました | 生成されました | 生成されません |
コピー代入演算子 | 生成されません | 生成されません | ない生成されました |
移動コンストラクター | 生成されません | 生成されません | 生成されません |
移動代入演算子 | なし生成されました | 生成されません | 生成されません |
デストラクター | 生成されません | 生成されません | 生成されません |
コピーコンストラクタと代入演算子のコピー | 生成されません | 生成されません | 生成されません |
コンストラクタのコピーとコンストラクタの移動 | 生成されません | 生成されません生成されました | 生成されません |
コンストラクターのコピーと代入演算子の移動 | 生成されません | 生成されません | 未生成生成された |
コピー代入演算子& 移動コンストラクタ | 生成されません | 生成されません | 生成されません |
代入演算子をコピー&移動代入演算子 | 生成されません | 生成されません生成されました | 生成されません |
移動コンストラクターとデストラクター | 生成されません | 生成されません | 生成されません |
移動代入演算子 &デストラクター | 生成されません | 生成されません | 生成されません |
コンストラクターのコピー & 代入演算子のコピー & コンストラクターの移動 | 生成されません | 生成されません生成されました | 生成されません |
コンストラクターのコピー & 代入演算子のコピー & 代入演算子の移動 | 生成されません | 生成されません | ない生成されました |
コンストラクターのコピー & コンストラクターの移動 & 代入演算子の移動 | 未生成 | 未生成 | 生成されました |
代入演算子のコピー & コンストラクターの移動 & 代入の移動演算子 | 生成されていません | 生成されていません | 生成されました |
これらのルールを認識することで、開発者はクラスが移動セマンティクスを適切に利用し、最適な効率を達成します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3