Maison >développement back-end >C++ >Quand `std::unique_ptr` nécessite-t-il une définition de type complète ?
std::unique_ptr
En C , il est généralement requis que les modèles de la bibliothèque standard soient instancié avec des types complets. Cependant, std::unique_ptr et std::shared_ptr sont des exceptions notables. Ils permettent une instanciation partielle avec des types incomplets, mais certaines opérations nécessitent des types complets.
Cette distinction découle d'un comportement potentiellement indéfini lors de la suppression d'un objet d'un type incomplet. Les pointeurs intelligents comme std::unique_ptr et std::shared_ptr visent à éviter cela en exigeant des types complets si nécessaire, garantissant ainsi que les destructeurs sont invoqués correctement.
Exigences d'exhaustivité des types pour std::unique_ptr
std::unique_ptr nécessite des types complets dans des cas spécifiques, comme résumé ci-dessous :
**Opération | Exigence de type complète** | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Constructeur par défaut | Incomplet | ||||||||||||||||||||
Constructeur de copie | N/A (unique_ptr n'a pas de copie constructeur) | ||||||||||||||||||||
Déplacer le constructeur | Incomplet | ||||||||||||||||||||
Destructeur |
|
||||||||||||||||||||
Constructeur à partir du pointeur | Incomplet | ||||||||||||||||||||
Affectation de copie | N/A (unique_ptr n'a pas d'opérateur d'affectation de copie) | ||||||||||||||||||||
Déplacer affectation | Terminé | ||||||||||||||||||||
reset() | Terminé | ||||||||||||||||||||
réinitialisation(A*) | Terminé |
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!