Objekte von Heap zu Stack verschieben bzw rückwärts
-
Moin!
Nach dem C++11 Standard kann man angeblich auf dem Stack deklarierte Kassen in den Heap verschieben? angeblich geht das mit dem std::move Befehl. Ich habe das nicht ganz kapiert. Kann mir kurz jemand einen Tipp geben? Vor allem ob das alles auch so bei Klassenmethoden funktioniert.
Vielen Dank im Voraus.
Gruß!
inge
-
Das hast du falsch verstanden. Das Moven macht ganz was anderes. Ein Move verschiebt nicht ein Objekt, sondern Ressourcen, die dem Objekt gehören. So kann beispielsweise ein neues Objekt die Ressourcen eines temporären Objekts übernehmen, welches bald zerstört wird. Auf die Weise entfällt das unnötige mehrfache Anfordern und Kopieren von Ressourcen.
Ein Objekt selbst zu verschieben ist unmöglich, da Teil der Identität eines Objekts auch seine Adresse ist. Man kann natürlich Kopien von einem Objekt an einem anderen Ort erstellen (sofern es kopierbar ist) oder die Ressourcen eines Objekts an ein anderes übergeben (da kommt dann ggf. ein Move ins Spiel). Stack oder Heap haben in dem Zusammenhang aber keine besondere Bedeutung, es ist egal, wo die beteiligten Objekte leben.
-
"move doesn't move, forward doesn't forward"
Es werden keine Objekte verschoben, sondern es wird den Objekten unter bestimmten Bedingungen erlaubt, die internen Daten zu verschieben, anstatt sie zu kopieren. Manchmal kann man dadurch unkopierbare Objekte manchmal trotzdem verschieben und sie z.B. in Containern speichern, aber implementieren muss man das alles selber. Man bekommt lediglich die zusätzliche Information, ob es sich bei einem Objekt um ein temporäres handelt. Wenn eine Klasse die entsprechenden Operatoren und Konstruktoren nicht definiert hat, nützt einem move gar nichts.
-
SeppJ schrieb:
Ein Objekt selbst zu verschieben ist unmöglich, da Teil der Identität eines Objekts auch seine Adresse ist.
Nicht immer.