Heim >Backend-Entwicklung >C++ >Wann erfordert „std::unique_ptr' eine vollständige Typdefinition?
std::unique_ptr
In C ist es im Allgemeinen erforderlich, dass Vorlagen in der Standardbibliothek vorhanden sind mit vollständigen Typen instanziiert. Allerdings sind std::unique_ptr und std::shared_ptr bemerkenswerte Ausnahmen. Sie ermöglichen eine teilweise Instanziierung mit unvollständigen Typen, aber bestimmte Operationen erfordern vollständige Typen.
Diese Unterscheidung ergibt sich aus einem möglichen undefinierten Verhalten beim Löschen eines Objekts eines unvollständigen Typs. Intelligente Zeiger wie std::unique_ptr und std::shared_ptr zielen darauf ab, dies zu verhindern, indem sie bei Bedarf vollständige Typen erfordern und so sicherstellen, dass Destruktoren korrekt aufgerufen werden.
Anforderungen an die Typvollständigkeit für std::unique_ptr
std::unique_ptr erfordert in bestimmten Fällen vollständige Typen, wie zusammengefasst unten:
**Operation | Vollständige Typanforderung** | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Standardkonstruktor | Unvollständig | ||||||||||||||||||||
Kopierkonstruktor | N/A (unique_ptr hat keinen Kopierkonstruktor) td> | ||||||||||||||||||||
Verschieben Konstruktor | Unvollständig | ||||||||||||||||||||
Destruktor |
|
||||||||||||||||||||
Unvollständig | |||||||||||||||||||||
Kopierzuweisung | N/A (unique_ptr hat keine Kopierzuweisung Operator) | ||||||||||||||||||||
Verschieben Zuweisung | Abgeschlossen | ||||||||||||||||||||
reset() | Abgeschlossen | ||||||||||||||||||||
reset(A*) | Complete |
Das obige ist der detaillierte Inhalt vonWann erfordert „std::unique_ptr' eine vollständige Typdefinition?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!