はい、デフォルトの移動コンストラクターは、そのベースとメンバーのメンバーごとの移動を実行します。
Example(Example&& mE) : a{move(mE.a)}, b{move(mE.b)} { }
次と同等です。
Example(Example&& mE) = default;
これは、ドラフト C++11 標準セクション12.8
のクラス オブジェクトのコピーと移動の段落13に移動することで確認できます(これは、次のように述べられています):
デフォルト設定され、削除済みとして定義されていないコピー/移動コンストラクターは
、それが odrused (3.2) である場合、または最初の宣言後に明示的にデフォルト設定されている場合、暗黙的に定義されます。[注: copy/move コンストラクターは、たとえ実装がその odr-use (3.2、12.2) を省略したとしても、暗黙のうちに定義されます。—エンドノート][...]
そしてパラグラフ15には次のように書かれています:
非共用体クラス X
の暗黙的に定義されたコピー/移動コンストラクターは、そのベースとメンバーのメンバー単位のコピー/移動を実行します。[ 注: 非静的データ メンバーのブレースまたはイコール初期化子は無視されます。12.6.2 の例も参照してください。--end note ] 初期化の順序は、ユーザー定義のコンストラクターでのベースとメンバーの初期化の順序と同じです (12.6.2 を参照)。x をコンストラクターのパラメーターにするか、移動コンストラクターの場合はパラメーターを参照する xvalue とします。各ベースまたは非静的データ メンバーは、そのタイプに適した方法でコピー/移動されます。
- メンバーが配列の場合、各要素は x の対応するサブオブジェクトで直接初期化されます。
- メンバー m が右辺値参照型 T&& を持つ場合、static_cast(xm) で直接初期化されます。
- それ以外の場合、ベースまたはメンバーは、x の対応するベースまたはメンバーで直接初期化されます。
仮想基本クラスのサブオブジェクトは、暗黙的に定義されたコピー/移動コンストラクターによって 1 回だけ初期化されるものとします (12.6.2 を参照)。