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::stringimplémentation que vous utilisez ni sur le fait qu’elle possède la même structure de mémoire que la leur.
std::stringest 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::stringd’ 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::stringappels 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::stringmembre auront une taille différente quand ils sont cochés dans la bibliothèque et dans le code client. Les std::stringdé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::stringversions différentes , ils seront parfaitement liés , mais cela peut donner lieu à des bogues méchants et difficiles à comprendre. Si vous modifiez votre std::stringimplémentation, toutes les bibliothèques exposant des membres de STL doivent être recompilées pour correspondre à la std::stringprésentation du client . Et parce que les programmeurs veulent que leurs bibliothèques soient robustes, vous ne les verrez que rarement std::stringexposés.
Pour être juste, cela s'applique à tous les types de LIST. IIRC ils n'ont pas la disposition de mémoire standardisée.