1

私は C++ 入門書第 5 版の最後の付録にいます。(ソリューション部分):

そこからの例を次に示します。

AssumeYは、独自のコピー コンストラクターを定義するが、ムーブ コンストラクターを定義しないクラスであると想定します。

 struct hasY{
     hasY() = default;
     hasY(hasY&&) = default;
     Y mem; // hasY will have a deleted move constructor
 };
 hasY hy, hy2 = std::move(hy); // error: move constructor is deleted

の定義を追加しましたstruct Y:

struct Y{
    Y() = default;
    Y(Y const&){cout << "Y's cpy-ctor\n";}
};
  • hasYプログラムを実行すると、問題なく動作し、削除された移動コンストラクターについて文句を言うことはありません。そして、私は出力を取得します:

     Y's cpy-ctor
    
  • Yしたがって、タイプのオブジェクトはコピーコンストラクターを介して移動されますが、その逆ではないため、これは機能すると思います。したがって、hasYの move-ctor を呼び出すYと、削除される の move-ctor が呼び出され、コンパイラはYの copy-ctor を使用してその要素を移動します。私は正しいですか?教えて。ありがとうございました!

4

1 に答える 1