Maison >développement back-end >C++ >`std::unique_ptr` a-t-il besoin d'une définition complète de T ?
Std::unique_ptr
Comportement dépendant de l'implémentation dans Visual Studio 2010 SP1
Le comportement dans Visual Studio 2010 SP1 suggère que son implémentation de std::unique_ptr nécessite une définition complète de Thing. Il ne s'agit pas d'une exigence standard, mais plutôt d'un choix spécifique à l'implémentation.
Exceptions partielles dans la bibliothèque standard
Bien que la plupart des modèles de bibliothèque standard C nécessitent des types complets, std ::shared_ptr et std::unique_ptr sont des exceptions partielles. Certaines de leurs fonctions peuvent être instanciées avec des types incomplets, en raison de leur rôle dans la prise en charge d'idiomes tels que le modèle pointeur vers l'implémentation (pimpl). Cependant, l'utilisation de types incomplets dans certaines opérations peut entraîner un comportement indéfini, tel que la suppression d'un objet incomplet.
Exigences d'exhaustivité des types pour différentes opérations
std::unique_ptr et std::shared_ptr nécessite des types complets dans différentes situations. Par exemple, ~std::unique_ptr nécessite un type complet pour son destructeur, tandis que std::unique_ptr(A*) autorise un type incomplet si le pointeur est repris. Un tableau résume ces exigences :
En conclusion, bien que std::unique_ptr ne nécessite pas intrinsèquement une définition de type complète dans la norme C, certaines implémentations (comme Visual Studio 2010 SP1) peuvent imposer une telle exigence . Il est important d'être conscient des exigences spécifiques de l'implémentation utilisée pour éviter un comportement indéfini.
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!