Ist std::unique_ptr
Ist std::unique_ptr
Implementierungsabhängiges Verhalten in Visual Studio 2010 SP1
Das Verhalten in Visual Studio 2010 SP1 deutet darauf hin dass die Implementierung von std::unique_ptr eine vollständige Definition von Thing erfordert. Dies ist keine Standardanforderung, sondern eher eine umsetzungsspezifische Wahl.
Partielle Ausnahmen in der Standardbibliothek
Während die meisten C-Standardbibliotheksvorlagen vollständige Typen erfordern, std ::shared_ptr und std::unique_ptr sind teilweise Ausnahmen. Einige ihrer Funktionen können aufgrund ihrer Rolle bei der Unterstützung von Redewendungen wie dem Pointer-to-Implementation-Muster (Pimpl) mit unvollständigen Typen instanziiert werden. Die Verwendung unvollständiger Typen in bestimmten Vorgängen kann jedoch zu undefiniertem Verhalten führen, z. B. zum Löschen eines unvollständigen Objekts.
Anforderungen an die Typvollständigkeit für verschiedene Vorgänge
std::unique_ptr und std::shared_ptr erfordert in verschiedenen Situationen vollständige Typen. Beispielsweise erfordert ~std::unique_ptr einen vollständigen Typ für seinen Destruktor, während std::unique_ptr(A*) einen unvollständigen Typ zulässt, wenn der Zeiger von übernommen wird. Eine Tabelle fasst diese Anforderungen zusammen:
Operation | std::unique_ptr | std::shared_ptr |
---|---|---|
Default constructor | incomplete | incomplete |
Copy constructor | - | incomplete |
Move constructor | incomplete | incomplete |
Destructor | complete | incomplete |
Constructor from pointer | incomplete | complete |
Copy assignment | - | incomplete |
Move assignment | complete | incomplete |
Reset without argument | complete | incomplete |
Reset with argument | complete | complete |
Zusammenfassend lässt sich sagen, dass std::unique_ptr zwar grundsätzlich keine vollständige Typdefinition im C-Standard erfordert, einige Implementierungen (wie Visual Studio 2010 SP1) jedoch möglicherweise eine solche Anforderung stellen . Es ist wichtig, sich der spezifischen Anforderungen der verwendeten Implementierung bewusst zu sein, um undefiniertes Verhalten zu vermeiden.
Das obige ist der detaillierte Inhalt vonBenötigt „std::unique_ptr' eine vollständige Definition von T?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!