Heim >Backend-Entwicklung >C++ >Was können Sie mit einem verschobenen Objekt in C 11 tun?

Was können Sie mit einem verschobenen Objekt in C 11 tun?

Linda Hamilton
Linda HamiltonOriginal
2024-11-29 02:33:09638Durchsuche

What Can You Do with a Moved-From Object in C  11?

Gültigkeit von verschobenen Objekten in C 11

Wenn ein Objekt aus C 11 verschoben wird, wird sein Zustand unbestimmt, was Fragen aufwirft darüber, welche Operationen anschließend daran durchgeführt werden können. Während Standardbibliothekstypen in einen gültigen, aber nicht spezifizierten Zustand verschoben werden, erfordern benutzerdefinierte Typen eine explizite Definition, um ihren gültigen Zustand nach dem Verschieben zu bestimmen.

Im Fall von Pimpl-Objekten, bei denen die Implementierung hinter einem Zeiger verborgen ist, Es stellt sich die Frage: Was kann mit einem Foo-Objekt gemacht werden, wenn dessen Pimpl-Zeiger wegbewegt wurde? Während das Zerstören oder Neuzuweisen des verschobenen Objekts sicher bleibt, schlägt der Versuch von Vorgängen wie do_stuff fehl, weil der Pimpl-Zeiger ungültig geworden ist.

Das Standarddesign fördert einen konservativen Ansatz, indem nicht spezifizierte Zustände für verschobene Objekte aktiviert werden effiziente Implementierung über verschiedene Bibliotheken hinweg. Dies erfordert die Abfrage des Status eines Objekts, bevor Vorgänge daran ausgeführt werden. Diese Aufgabe kann zu Leistungseinbußen führen, insbesondere in Szenarien mit einer hohen Häufigkeit von Verschiebevorgängen.

Um die Notwendigkeit einer solchen Abfrage zu vermeiden, können benutzerdefinierte Typen dies tun Geben Sie explizit ihren gültigen Status nach dem Verschieben an. Beispielsweise könnte die Klasse pimpl deklarieren, dass ein Verlassen der Klasse do_stuff ungültig macht und ein undefiniertes Verhalten zur Folge hat. Dieser Ansatz stellt sicher, dass Benutzer sich der möglichen Folgen des Verschiebens von einem Objekt bewusst sind und potenzielle Fehler vermeiden können.

Es ist zu beachten, dass verschobene Objekte weiterhin die Anforderungen aller in der Standardbibliothek definierten Konzepte erfüllen müssen. die die ausgezogenen Staaten nicht berücksichtigen. Daher können benutzerdefinierte Typen, die keinen gültigen Zustand gemäß der Definition durch relevante Konzepte beibehalten, nicht mit der Standardbibliothek verwendet werden, ohne das Risiko eines undefinierten Verhaltens einzugehen.

Das obige ist der detaillierte Inhalt vonWas können Sie mit einem verschobenen Objekt in C 11 tun?. 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