初心者の質問:
Class Quote {
public:
/* ..... */
virtual Quote* clone() const & {return new Quote(*this);}
virtual Quote* clone() && {return new Quote(std::move(*this));} // (***)
/* ..... */
}
newによって割り当てられたオブジェクトはフリーストアにあります。*これはclone()を呼び出すオブジェクトであり、必ずしも動的に割り当てられたオブジェクトではありません。
移動元オブジェクトと移動先オブジェクトが異なるメモリ領域にある場合、移動メカニズムはどのように機能しますか? それとも、彼らは本当に別の地域にいることはなく、何かが足りないのでしょうか?
私が理解していることから、移動コンストラクターは、移動元オブジェクトのデータ/メモリ部分にリンクする新しいオーバーヘッドを作成します。データ自体は移動/変更されません。上記の場合、これはどのように機能しますか?それが同じように機能する場合、新しい実行後、動的に割り当てられたオブジェクトがフリーストアの外にあることはありませんか (どこにありますか? ) std::move()がどのように/なぜ機能するのか正確にはわかりませんが、名前付きオブジェクトへの右辺値参照を強制的に返し、そのオブジェクトから移動できるようにします。