Maison >développement back-end >C++ >Pourquoi n'y a-t-il pas d'équivalent non atomique de std::shared_ptr dans la bibliothèque standard C ?

Pourquoi n'y a-t-il pas d'équivalent non atomique de std::shared_ptr dans la bibliothèque standard C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-03 03:06:29847parcourir

Why is there no non-atomic equivalent of std::shared_ptr in the C   standard library?

Examen des arguments en faveur d'un équivalent non atomique de std::shared_ptr

Introduction

Les pointeurs intelligents en C 11 offrent un mécanisme puissant pour la gestion de la mémoire, std::shared_ptr étant le principal choix pour la propriété partagée. Cependant, sa nature atomique introduit une surcharge qui peut s’avérer inutile ou indésirable dans certains scénarios. Cet article explore l'absence d'un équivalent non atomique de std::shared_ptr dans la bibliothèque standard et examine les raisons potentielles derrière cette décision.

La recherche d'une alternative non atomique

Contrairement à la prémisse de la question, std::shared_ptr n'est pas le seul pointeur intelligent dans pour présenter l’atomicité. std::weak_ptr est également atomique, présentant une solution potentielle pour les scénarios nécessitant des références non propriétaires. Néanmoins, l'intérêt pour une alternative non-atomique shared_ptr dédiée suggère une lacune perçue dans la bibliothèque.

Raisons de l'exclusion

Malgré les avantages potentiels d'une alternative non-atomique shared_ptr atomic shared_ptr, le comité des normes C a choisi de ne pas en inclure un dans C 11. La décision découle d'un débat houleux lors de la réunion de Rapperswil en 2010. Les arguments contre son inclusion comprenaient :

  • Potentiel d'utilisation future des threads : Shared_ptrs non atomiques pourrait être utilisé par inadvertance dans des contextes multithread, conduisant à des erreurs subtiles et difficiles à détecter.
  • Cohérence dans la conception du pointeur intelligent : Un shared_ptr unifié qui gère le comptage de références de manière uniforme dans tous les cas d'utilisation simplifie l'interopérabilité et l'utilisation de la bibliothèque.
  • Coût de performance minimal : Les opérations atomiques dans shared_ptr ne sont pas d'un coût prohibitif, en particulier si l'on considère les opérations de déplacement, qui contournent les actions atomiques.
  • Choix de l'utilisateur : Les développeurs sont libres de créer leur propre puce intelligente à comptage de références non atomique pointeurs si vous le souhaitez.

Conclusion

L'absence d'équivalent non atomique de std::shared_ptr dans la norme C 11 a de multiples facettes. Bien qu'il compromette le principe « payez pour ce que vous utilisez », il donne la priorité à la cohérence, à l'évitement des erreurs et à une surcharge minimale en termes de performances. La décision reflète un compromis entre offrir une flexibilité optimale et garantir la robustesse du code.

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