Heim >Backend-Entwicklung >C++ >Was sind die Gültigkeit und zulässigen Vorgänge für verschobene Objekte in C 11?
Gültigkeit von verschobenen Objekten in C 11
Das Verständnis der Gültigkeit von verschobenen Objekten in C 11 kann komplex sein. Ziel dieses Artikels ist es, das Konzept zu verdeutlichen, insbesondere im Zusammenhang mit Pimpl-Objekten.
Von Objekten verschoben
Wenn ein Objekt verschoben wird, wird sein Zustand nicht mehr spezifiziert. Die Standardbibliothek definiert die Gültigkeitskriterien für Standardbibliothekstypen und stellt sicher, dass verschobene Objekte in einen gültigen, aber nicht spezifizierten Zustand versetzt werden. Bei benutzerdefinierten Typen liegt es jedoch in der Verantwortung des Entwicklers, den gültigen Status und die zulässigen Vorgänge für verschobene Objekte zu definieren und zu dokumentieren.
Beispiel: Pimpl Idiom
In Im Beispiel-Pimpl-Idiom verweist das impl_-Mitglied auf eine dynamische Zuordnung. Nach einem Verschiebungsvorgang wird der Zeiger im verschobenen Objekt auf nullptr gesetzt. Dadurch wird die do_stuff()-Methode ungültig, da sie versucht, den impl_-Zeiger zu dereferenzieren.
Invariant vs. gültiger Zustand
Die Invariante, die ein Foo-Objekt immer tun kann () ist nach dem Verschieben nicht mehr gültig. Im Allgemeinen erfüllen verschobene Objekte möglicherweise nicht alle Invarianten, die für ihre nicht verschobenen Gegenstücke gelten.
Option 1: Geprüfte Operation
Eine Option besteht darin, explizit zu prüfen Wenn der impl_-Zeiger in do_stuff() nullptr ist, und initialisieren Sie ihn bei Bedarf. Dies führt jedoch zu einem potenziellen Leistungsaufwand.
Option 2: Ungültigen Status definieren
Alternativ kann der Code explizit definieren, dass sich aus Foo verschobene Objekte in einem ungültigen Zustand befinden state und dass der Aufruf von do_stuff() für sie zu einem Fehler führt.
Concepts und Moved-From Objekte
Es ist wichtig zu beachten, dass die von der Standardbibliothek definierten Konzepte keine verschobenen Objekte berücksichtigen. Um die Anforderungen von Konzepten zu erfüllen, müssen verschobene Objekte benutzerdefinierter Typen weiterhin die Konzeptanforderungen erfüllen.
Fazit
Das Verständnis der Gültigkeit von verschobenen Objekten ist von entscheidender Bedeutung für die korrekte Implementierung der Bewegungssemantik. Entwickler sollten die Auswirkungen von Verschiebungsvorgängen auf den Zustand ihrer Objekte sorgfältig abwägen und das erwartete Verhalten entsprechend definieren.
Das obige ist der detaillierte Inhalt vonWas sind die Gültigkeit und zulässigen Vorgänge für verschobene Objekte in C 11?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!