さて、私は値について読んできましたが、彼らは素晴らしいアイデアのように思えますが、何かが私を悩ませています。特に、移動するという主張は、私たちがリソースを盗んでコピーを避けることを可能にします。rvalues C++ 0xとヒープに移動
私は移動が動作し、スタック上で起こったすべてのものをコピーしないことを理解していますが、最終的にはスタック上で行われた処理のほとんどがヒープにコピーしたいと思う値をもたらします動かす
struct Foo
{
int x;
};
void doIt()
{
Foo* f = new Foo();
f->x = (2 + 4);
}
したがって、この例では、(+ 4 2)から得られた右辺値はおそらく代わり> X F-ために上に移動させることができる:intは次のコードを与え、移動代入演算子を持っていると仮定すると
コピーされた大丈夫ですしかしfとf-> xはヒープにあり、その値はスタックにあります。コピーを避けることは不可能に思えます。あなたは単純にf-> xをrvalueのメモリに向けることはできません。その価値は終わるとすぐに吹き飛ばされるでしょう。コピーが必要なようです。
コピーが作成されるのは間違いありませんか? または間違っていますか? または私は完全にrvalueの概念を誤解しましたか?
あなたは何かを誤解しているようです。移動は魔法ではなく、割り当て/コピーするよりもint値を取得する早い方法はありません。 – UncleBens
@UncleBensまあ、私はそれを確認しようとしています。私は読み値を維持して物事をより速くし、コピーを避ける。しかし、私の例のように、私は確かにコピーが必要であり、rvaluesはある特定のケースでのみ役立つことを確認しようとしています。 – anio
スカラー型のオブジェクトの移動は、スカラー型をコピーすることと同じです。より複雑なタイプでは、移動は面白くなります。あなたがそれらを動かすと、正確に何が起こりますかは、クラスデザイナーに任せます。この動作は、独自の移動コンストラクタを定義して制御します。 – sellibitze