Les conteneurs C interdisent notoirement l'instanciation avec des types incomplets. La bibliothèque de conteneurs de Boost contourne cette restriction, soulevant des questions sur son objectif et ses inconvénients potentiels.
Justification de la restriction
Historiquement, le comité de normalisation C a constaté différents comportements d'implémentation avec des types dans différentes implémentations STL. Pour garantir la compatibilité et éviter toute confusion, ils ont explicitement interdit les types incomplets dans les conteneurs de bibliothèques standard.
Inconvénients potentiels de l'autorisation des types incomplets
Bien qu'autoriser les types incomplets puisse permettre des structures de données avancées , cela pourrait également poser des problèmes d'exécution. Les types incomplets manquent des informations nécessaires, ce qui rend difficile pour les conteneurs de gérer l'allocation de mémoire et la durée de vie des objets.
Possibilités futures
Le comité C a reconnu les avantages potentiels d'autoriser les types incomplets genres. En 2002, le président du groupe de travail sur la bibliothèque a laissé entendre que cette restriction pourrait être assouplie dans les futures versions de C . Cependant, dans la norme actuelle, l'interdiction reste en vigueur.
La solution de Boost
Reconnaissant les limites de l'approche de la norme, les développeurs de Boost ont créé leurs propres conteneurs capables de travailler avec des types incomplets. Cela a permis la création de structures de données récursives qui seraient autrement impossibles avec la bibliothèque standard.
C 17 Allocation partielle
C 17 a introduit un assouplissement partiel de cette restriction pour certains conteneurs, permettant l'utilisation de types incomplets pour les types déclarés en avant dans le type d'élément ou le type de clé du conteneur. Cette allocation limitée améliore la compatibilité avec certains modèles de programmation modernes tout en maintenant la stabilité avec les implémentations existantes.
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!