Maison >développement back-end >C++ >`std::unique_ptr` a-t-il besoin d'une définition complète de T ?

`std::unique_ptr` a-t-il besoin d'une définition complète de T ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-25 14:10:15941parcourir

Does `std::unique_ptr` Need a Complete Definition of T?

Std::unique_ptr Est-ce que std::unique_ptr faut-il avoir une définition complète du type T qu'il gère ? Cette question découle des observations selon lesquelles std::unique_ptr ne parvient pas à compiler dans Visual Studio 2010 SP1 lorsque l'objet est déclaré en avant.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn