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
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!