私は C++ 入門書第 5 版の最後の付録にいます。(ソリューション部分):
そこからの例を次に示します。
Assume
Y
は、独自のコピー コンストラクターを定義するが、ムーブ コンストラクターを定義しないクラスであると想定します。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 を使用してその要素を移動します。私は正しいですか?教えて。ありがとうございました!