C++0xのムーブセマンティクスと右辺値参照について悩む

ムーブコンストラク

Object::Object(Object&& obj)
{
  member = obj.member; // 内部のメモリをコピーする
  obj.member = 0;      // コピー元へのメモリの参照を消す
}

で、つまり要素をコピーしないのだー! はやいぞー!
……と、魔導書(コレ:株式会社ロングゲート)に書いてあった。

つまり、
・代入先のインスタンスが内部で保持してるメモリ上の物理的なアドレスを、一時オブジェクトが持っているデータのアドレスで上書きする。
・この時、一時オブジェクトと代入先オブジェクトの両方が同じメモリ上のアドレスを参照している。
・それではマズいので、コピー元の方の参照を消す。
・そうすると、一時オブジェクトが確保した物理メモリ上のデータを所有するのは代入先のオブジェクトになる。
・ので、移動が完了する。
・そして、参照が空になったクズオブジェクトを、テキトーにデストラクタで破壊する。
……。
こ、こういう理解でいいのか!? 合ってるかが分からなくてすごく不安だ!


追記:
闇の軍団クラスタの人に教えてもらった例で言うと、
・代入先をまず初期化る
・一時オブジェクトと置換する
みたいな感じ? 実装はいろいろ有るとの事だから、実装にはとらわれないようにするとしても。


うん、だいたいのイメージは掴めた……と思う。
一時オブジェクトが確保したリソースの所有権(さっきまでイミフ用語だったのに、たしかに理解するとしっくり来る)を移動させて、どうせ使わない方は適当に解放とかしてぶっ壊す、って感じで良いっぽいな。


……おおお、確かにこれ、超便利っていうか、超速度早くなるじゃん。
すげえ!

                                                  • -

追記:
適当に破壊するどころか、下手すると破壊"しない"っていう話を2chC++0xスレで聞いた。本当にそうだとすると、デストラクトする手間が消滅するわけだから、高速になるのもすごく納得なんだけど・・・。
今度テストしてみよう。