Heim >Backend-Entwicklung >C++ >Was sind die Gültigkeit und zulässigen Vorgänge für verschobene Objekte in C 11?

Was sind die Gültigkeit und zulässigen Vorgänge für verschobene Objekte in C 11?

Linda Hamilton
Linda HamiltonOriginal
2024-12-06 09:34:12483Durchsuche

What are the Validity and Allowable Operations on Moved-From Objects 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn