Heim > Backend-Entwicklung > C++ > Was sind die gültigen Zustände von verschobenen Objekten in C 11 und wie werden sie definiert?

Was sind die gültigen Zustände von verschobenen Objekten in C 11 und wie werden sie definiert?

Barbara Streisand
Freigeben: 2024-12-01 18:14:11
Original
384 Leute haben es durchsucht

What are the Valid States of Moved-from Objects in C  11 and How to Define Them?

Gültige Zustände für verschobene Objekte in C 11 verstehen

Die Bewegungssemantik in C 11 führt ein entscheidendes Konzept ein: den Zustand von Objekten danach verschoben wird. Allerdings können die genauen Bedingungen, die ein verschobenes Objekt erfüllen muss, verwirrend sein.

Das Problem mit Pimpl-Objekten

Bedenken Sie die Pimpl-Sprache, bei der eine Klasse a umschließt Zeiger auf ein Implementierungsobjekt. Wenn wir von einem Foo-Objekt (das einen std::unique_ptr enthält) wechseln, was können wir anschließend damit machen?

  • Es zu zerstören oder ihm zuzuweisen ist sicher.
  • Das Aufrufen von Mitgliedsfunktionen (über den Implementierungszeiger) ist problematisch, da es möglicherweise auf einen gelöschten Wert verweist Objekt.

Verschobene Standardbibliothekszustände

Der C-Standard definiert, dass verschobene Objekte von Standardbibliothekstypen in einem „unspezifizierten, aber gültigen Zustand“ platziert werden Zustand." Dies bedeutet, dass Sie Vorgänge für sie ausführen können, die gültige Vorbedingungen haben.

Für nicht standardmäßige Typen müssen Sie jedoch den gültigen Status und die zulässigen Vorgänge nach dem Verschieben definieren und dokumentieren.

Definieren des gültigen Status für pimpl

Im Foo-Beispiel könnten wir angeben, dass ein Verlassen davon die Funktion do_stuff ungültig macht. Dies würde verhindern, dass wir es versehentlich für ein verschobenes Objekt aufrufen.

Dynamische Zuweisungen vermeiden

Um den Overhead dynamischer Zuweisungen bei der Überprüfung des gültigen Status zu vermeiden, sollten Sie Folgendes in Betracht ziehen unter Verwendung des Musters „Nullobjekt“. Dazu gehört ein Standard-FooImpl, das verwendet wird, wenn sich das Objekt in einem ungültigen Zustand befindet.

Konzepte und verschobene Objekte

Beachten Sie abschließend die verschobenen Objekte muss dennoch den Anforderungen standardisierter Bibliothekskonzepte genügen. Wenn Ihr Typ nicht in einem gültigen Zustand bleibt, kann die Verwendung mit Standardbibliotheksfunktionen zu undefiniertem Verhalten führen.

Das obige ist der detaillierte Inhalt vonWas sind die gültigen Zustände von verschobenen Objekten in C 11 und wie werden sie definiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage