Outre les raisons affichées ici, il en existe un autre - la compatibilité binaire . Les rédacteurs des bibliothèques n’ont aucun contrôle sur l’ std::string
implémentation que vous utilisez ni sur le fait qu’elle possède la même structure de mémoire que la leur.
std::string
est un modèle, sa mise en œuvre provient donc de vos en-têtes STL locaux. Maintenant, imaginez que vous utilisiez localement une version STL optimisée pour les performances, entièrement compatible avec le standard. Par exemple, vous avez peut-être choisi d’introduire des tampons statiques dans chacun std::string
d’ eux pour réduire le nombre d’allocations dynamiques et d’absence de mémoire cache. En conséquence, la disposition de la mémoire et / ou la taille de votre implémentation sont différentes de celles de la bibliothèque.
Si seule la présentation est différente, certains std::string
appels de fonction de membre sur des instances passées de la bibliothèque au client ou l'inverse peut échouer, en fonction des membres déplacés.
Si la taille est également différente, tous les types de bibliothèque ayant un std::string
membre auront une taille différente quand ils sont cochés dans la bibliothèque et dans le code client. Les std::string
décalages des membres de données suivants seront également décalés, et tout accesseur en accès direct / en ligne appelé à partir du client retournera des ordures, malgré le "bon résultat" lors du débogage de la bibliothèque elle-même.
Bottomline - Si la bibliothèque et le code client sont compilés par des std::string
versions différentes , ils seront parfaitement liés , mais cela peut donner lieu à des bogues méchants et difficiles à comprendre. Si vous modifiez votre std::string
implémentation, toutes les bibliothèques exposant des membres de STL doivent être recompilées pour correspondre à la std::string
présentation du client . Et parce que les programmeurs veulent que leurs bibliothèques soient robustes, vous ne les verrez que rarement std::string
exposés.
Pour être juste, cela s'applique à tous les types de LIST. IIRC ils n'ont pas la disposition de mémoire standardisée.