Heim >Backend-Entwicklung >C++ >Welche Bedingungen stellen die Gültigkeit eines verschobenen Objekts in C 11 sicher?
Gültiger Status von „Verschoben von“-Objekten in C 11
Frage:
In C 11: Wenn ein Objekt verschoben wird, geht es in einen nicht spezifizierten Zustand über. Welche Bedingungen sollte ein solches „verschobenes“ Objekt erfüllen, um gültig zu bleiben?
Antwort:
Die Gültigkeit eines verschobenen Objekts wird durch die Typspezifikation und definiert Dokumentation.
Bei Standardbibliothekstypen werden verschobene Objekte in einen nicht spezifizierten, aber gültigen Zustand versetzt, was bedeutet, dass sie alle Standardanforderungen für den Typ erfüllen, sofern nicht anders angegeben. Benutzer müssen den Status abfragen, um gültige Vorgänge zu ermitteln.
Für vom Entwickler definierte Typen definieren und dokumentieren Sie, was einen gültigen Status und zulässige Vorgänge für verschobene Objekte ausmacht.
Im Kontext von Das Pimpl-Idiom-Beispiel lieferte Folgendes:
class Foo { std::unique_ptr<FooImpl> impl_; };
Sie könnten angeben, dass das Verschieben von einem Foo-Objekt die Operation do_stuff ungültig macht und ihr Verhalten undefiniert macht. Dies ist sinnvoll, da das Verschieben impliziert, dass keine weiteren Vorgänge für das verschobene Objekt ausgeführt werden können.
Alternativ können Sie einen bestimmten Status für verschobene Foo-Objekte definieren und so sicherstellen, dass die Konzeptanforderungen der Standardbibliothek erfüllt sind noch getroffen. Dies würde es Ihnen ermöglichen, verschobene Foo-Objekte mit der Standardbibliothek ohne undefiniertes Verhalten zu verwenden.
Beachten Sie, dass die Konzepte der Standardbibliothek keine verschobenen Objekte berücksichtigen. Wenn daher verschobene Objekte gemäß dem relevanten Konzept nicht in einem gültigen Zustand bleiben, führt ihre Verwendung mit der Standardbibliothek zu undefiniertem Verhalten.
Das obige ist der detaillierte Inhalt vonWelche Bedingungen stellen die Gültigkeit eines verschobenen Objekts in C 11 sicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!