Maison  >  Article  >  développement back-end  >  Pourquoi la norme C n'inclut-elle pas un « std::shared_ptr » non atomique ?

Pourquoi la norme C n'inclut-elle pas un « std::shared_ptr » non atomique ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-30 02:03:28781parcourir

Why Doesn't the C   Standard Include a Non-Atomic `std::shared_ptr`?

Pointeurs intelligents non atomiques : exploration de l'absence dans le standard C

Dans le domaine de la gestion de la mémoire C, le std::shared_ptr se présente comme un pointeur intelligent exceptionnel en raison de ses opérations atomiques. Cela soulève la question : pourquoi n'y a-t-il pas d'équivalent non atomique dans la bibliothèque de mémoire standard ?

1. Alternatives non atomiques à std::shared_ptr

Bien que std::shared_ptr offre un comportement atomique, certains scénarios peuvent ne pas justifier une telle surcharge. Pour résoudre ce problème, des bibliothèques externes ont vu le jour, fournissant des pointeurs intelligents non atomiques à comptage de références. Cependant, la bibliothèque de mémoire standard elle-même ne dispose pas de telles offres.

2. L'absence dans C 11 : raisons et débat

Malgré l'utilité perçue, une proposition de version non atomique de std::shared_ptr a été rejetée lors du processus de standardisation du C 11. Plusieurs arguments ont alimenté cette décision :

  • Possibilité d'utilisation abusive : Des pointeurs intelligents non atomiques pourraient être utilisés par inadvertance dans des contextes multithread, entraînant des erreurs difficiles à déboguer.
  • Cohérence et interopérabilité : Le maintien d'un seul shared_ptr "universel" avec une fonctionnalité atomique a permis une interopérabilité plus fluide entre les bibliothèques C, y compris celles tierces.
  • Considérations sur les performances : Bien que les opérations atomiques entraînent un coût en termes de performances, elles ne sont pas prohibitives, en particulier lorsque la construction et l'affectation de déplacements sont utilisées.
  • Options de personnalisation : Si un programmeur nécessite un comportement non atomique, ils ne sont pas empêchés de créer leur propre implémentation personnalisée de pointeur intelligent compté par référence.

Conclusion

L'absence d'un std::shared_ptr non atomique dans la norme C est le résultat d'une décision délibérée basée sur des préoccupations concernant une utilisation abusive potentielle, la cohérence, les performances et la flexibilité de personnalisation. Bien que les bibliothèques externes puissent fournir de telles alternatives, la norme elle-même a donné la priorité aux avantages d'un pointeur intelligent atomique universel pour la gestion de la mémoire.

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