Okay, ich habe gelesen über rvalues und sie scheinen wie eine gute Idee, aber etwas stört mich über sie. Insbesondere die Behauptung, dass move es erlaubt, Ressourcen zu stehlen und das Kopieren zu vermeiden.rvalues C++ 0x und Umzug auf den Haufen
Ich verstehe, dass Bewegung funktioniert und vermeidet kopieren für alles, was auf dem Stapel passiert, aber schließlich die meisten Sachen auf dem Stapel getan erbringt einen Wert, den wir in den Haufen kopiert werden wollen und das ist, wo ich nicht denke Bewegung funktioniert.
Unter der Annahme, dass eine Bewegung int Zuweisungsoperator hat, mit dem folgenden Code:
struct Foo
{
int x;
};
void doIt()
{
Foo* f = new Foo();
f->x = (2 + 4);
}
also in diesem Beispiel ist der R-Wert aus (2 + 4), kann angenommen werden, bewegt über> f- x anstelle von kopiert. OK großartig. Aber f und folglich ist f-> x auf dem Haufen und dieser rvalue ist auf dem Stapel. Es scheint unmöglich, eine Kopie zu vermeiden. Sie können nicht einfach f-> x auf den Speicher des rvalue zeigen. Dieser Wert wird weggeweht, sobald es endet. Eine Kopie scheint notwendig.
Also habe ich Recht, dass eine Kopie gemacht wird? Oder irre ich mich? Oder habe ich das rvalue-Konzept komplett falsch verstanden?
Es scheint, dass Sie etwas falsch verstehen. Das Bewegen ist keine Magie und es gibt keinen schnelleren Weg, einen int-Wert zu erhalten als das Zuweisen/Kopieren. – UncleBens
@UncleBens Nun, ich versuche das nur zu bestätigen. Ich lese weiterhin rvalues Dinge schneller machen und kopieren zu vermeiden. Aber wie in meinem Beispiel versuche ich zu bestätigen, dass das Kopieren tatsächlich erforderlich ist und rvalues nur in bestimmten Fällen helfen. – anio
Das Verschieben von Objekten von Skalartypen entspricht dem Kopieren von Objekten. Moving wird mit komplexeren Typen interessant.Was genau passiert, wenn Sie diese verschieben, liegt beim Klassen-Designer. Sie steuern dieses Verhalten, indem Sie Ihren eigenen Move-Konstruktor definieren. – sellibitze