私は生徒に紹介するのに十分なムーブ セマンティクスを学ぼうとしています。私は非常に単純化されたベクトルまたは文字列のようなクラスを使用しており、メモリを管理し、メンバーがメッセージを出力してアクティビティを示しています。学生に見せるための簡単な例を作成しようとしています。
RVO および gcc 4.7 の他の部分の構築省略と clang は積極的にコピーおよび移動構築を排除するため、作業中の移動割り当ては簡単に確認できますが、作業中の移動構築を見たのは、gcc 4.7 で構築省略をオフにした場合だけです。 -fno-elide-constructors を使用。
明示的なコピー構築ステートメント
MyString newString(oldString);
省略が有効な場合でも、コピー コンストラクターを呼び出します。しかし、何かのような
MyString newString(oldString1 + oldString2);
省略のため、移動コンストラクターを呼び出しません。
std::move の説明は後で行う必要があるため、明示的に std::move を使用しても単純な例にはなりません。
だから私の質問:コピー/移動コンストラクターが省略されている場合でも、移動構築を呼び出す簡単なコード例はありますか?