Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

C++: Verschiebesemantik

Einen Verschiebungs-Zuweisungsoperator erstellen

Testen Sie unsere 2015 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Aufsetzend auf dem bereits erstellten Konstruktor, sorgt der Verschiebungs-Zuweisungsoperator dafür, dass das neu konstruierte Objekt mit den korrekten Werten befüllt werden kann.
03:31

Transkript

Zusammen mit dem Verschiebekonstruktor ist der Verschiebungs-Zuweisungsoperator ein ebenso wichtiger Bestandteil, um Verschiebesemantik in Ihrem Code zu unterstützen. Hier habe ich eine Arbeitskopie von rational-02.cpp. Diese Datei enthält den Verschiebekonstruktor, den wir weiter vorne in diesem Kapitel hinzugefügt haben. Als Erstes müssen wir hier unten unseren vorhandenen Zuweisungsoperator bearbeiten. Ich gebe eine kleine Meldung aus, damit wir wissen, dass der Operator aufgerufen wird. Anschließend füge ich hier unten in main eine Zuweisung ein. Ich schreibe: "d" ist gleich "b", erstelle und starte das Projekt. Hier ist unsere Meldung für die Zuweisung zu sehen, und "d" ist jetzt das Gleiche wie "b". Wenn ich nun diese Zuweisung beispielsweise in "move(b)" ändere, das Projekt erstelle und ausführe, ist zu sehen, dass wir immer noch diesen Zuweisungsoperator aufrufen, weil wir keinen Verschiebungs- Zuweisungsoperator haben. Und selbst wenn das move-Template dieses b zu einem R-Wert macht, weil wir diesen Verschiebungs- Zuweisungsoperator nicht unterstützen, wird trotzdem der normale Zuweisungsoperator aufgerufen. Erstellen wir also einen Verschiebungs-Zuweisungsoperator. Zuerst gehe ich zu meinem Zuweisungsoperator. Hier ist er. Ich kopiere ihn und wandle ihn in einen Verschiebungs-Zuweisungsoperator um. Dazu schreibe ich hier ein zweites "&"-Zeichen und das NOEXCEPT. Auch hier verwende ich dieses Makro für NOEXCEPT, um sowohl Microsoft Visual C++, das in der aktuellen Version das Schlüsselwort NOEXCEPT nicht kennt, als auch andere aktuelle Compiler wie diesen hier zu unterstützen. Nun gehen wir hier nach unten zur Definition unseres Zuweisungsoperators. Ich kopiere wieder den Code und ändere die Kopie. Offenbar geht es so am einfachsten. Dies wird unser Verschiebungs- Zuweisungsoperator. Ich ändere hier noch die Meldung in "move assignment", Verschiebungszuweisung, und wir machen dies hier zur Verschiebungs- statt Kopieroperation. Auch hier muss ich dafür sorgen, dass ich das andere Objekt zurücksetze und das NOEXCEPT nicht vergesse. Außerdem können wir dieses "const" hier nicht brauchen. Da dieses "reset" nicht const-sicher ist, erhalte ich hier eine Fehlermeldung. Ich muss also dieses "const" loswerden. Das muss auch hier oben passieren, damit die Signatur wieder stimmt. Weg damit. Jetzt sollten wir einen funktionsfähigen Verschiebungs-Zuweisungsoperator haben. Ich erstelle also das Projekt und starte es. Und hier, wo die Meldung "assignment" erscheint, sollte nun die Meldung "move assignment" zu sehen sein. Beachten Sie einige Dinge. Wie beim Verschiebungskonstruktor muss diese Methode als NOEXCEPT markiert werden. Außerdem müssen wir das andere Objekt in einem gültigen Zustand zurücklassen. Und jetzt, nach der Verschiebung, ist zu sehen, dass b genau wie c zurückgesetzt wird, weil wir den Verschiebekonstruktor auf c verwendet haben. Und nun ist b ebenfalls auf Null über Eins zurückgesetzt worden. Der Verschiebungs- Zuweisungsoperator ist also ein wichtiger Bestandteil, wenn Sie in Ihrer Klasse Verschiebesemantik unterstützen wollen. Wie Sie sich überzeugen konnten, lässt er sich sehr leicht implementieren, und Sie sollten ihn möglichst immer unterstützen, wenn Sie die Unterstützung für einen Verschiebekonstruktor bereitstellen wollen.

C++: Verschiebesemantik

Verstehen Sie die grundlegenden Konzepte und sehen Sie, wie Verschiebesemantik in der modernen C++Entwicklung funktioniert.

30 min (9 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:27.12.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!