4

コンパイラによって暗黙的に生成された移動コンストラクターと移動代入演算子は、コンパイラーによってどのように実装されますか?

コンパイラは、コピー アンド スワップ イディオムを統合operator=(強力な例外安全保証付き) で使用しますか?それとも、メンバー単位の移動を実装しますか?

4

2 に答える 2

4

暗黙的に定義されたコピー操作がメンバーごとのコピーを行うのと同じように、これはメンバーごとの移動です。12.8 [class.copy] パラグラフ 15 および 25 を参照してください。

コピー不可の型またはスワップ不可の型の場合、コピー アンド スワップは不可能です。別の特別なメンバーや、swap存在しないか必要に応じて機能しない可能性のあるメンバーに移動操作を依存させたくありません。

于 2013-03-03T20:32:45.043 に答える
2

コンパイラは、統一された operator= (強力な例外安全性保証付き) でコピー アンド スワップ イディオムを使用しますか、それともメンバーごとの移動を実装しますか?

C++11 標準のパラグラフ 12.8/15 によると:

非共用体クラス X の暗黙的に定義されたコピー/移動コンストラクターは、そのベースとメンバーのメンバー単位のコピー/移動を実行します。[...]

さらに、パラグラフ 12.8/28 によると:

非共用体クラス X の暗黙的に定義されたコピー/移動代入演算子は、そのサブオブジェクトのメンバー単位のコピー/移動代入を実行します。[...]

于 2013-03-03T20:42:51.733 に答える