コンパイラによって暗黙的に生成された移動コンストラクターと移動代入演算子は、コンパイラーによってどのように実装されますか?
コンパイラは、コピー アンド スワップ イディオムを統合operator=
(強力な例外安全保証付き) で使用しますか?それとも、メンバー単位の移動を実装しますか?
コンパイラによって暗黙的に生成された移動コンストラクターと移動代入演算子は、コンパイラーによってどのように実装されますか?
コンパイラは、コピー アンド スワップ イディオムを統合operator=
(強力な例外安全保証付き) で使用しますか?それとも、メンバー単位の移動を実装しますか?
暗黙的に定義されたコピー操作がメンバーごとのコピーを行うのと同じように、これはメンバーごとの移動です。12.8 [class.copy] パラグラフ 15 および 25 を参照してください。
コピー不可の型またはスワップ不可の型の場合、コピー アンド スワップは不可能です。別の特別なメンバーや、swap
存在しないか必要に応じて機能しない可能性のあるメンバーに移動操作を依存させたくありません。
コンパイラは、統一された operator= (強力な例外安全性保証付き) でコピー アンド スワップ イディオムを使用しますか、それともメンバーごとの移動を実装しますか?
C++11 標準のパラグラフ 12.8/15 によると:
非共用体クラス X の暗黙的に定義されたコピー/移動コンストラクターは、そのベースとメンバーのメンバー単位のコピー/移動を実行します。[...]
さらに、パラグラフ 12.8/28 によると:
非共用体クラス X の暗黙的に定義されたコピー/移動代入演算子は、そのサブオブジェクトのメンバー単位のコピー/移動代入を実行します。[...]