Maison  >  Article  >  développement back-end  >  Dois-je transmettre « shared_ptr » par valeur ou par référence ?

Dois-je transmettre « shared_ptr » par valeur ou par référence ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-31 14:24:02109parcourir

Should I Pass `shared_ptr` by Value or by Reference?

Passer des pointeurs partagés : par référence ou par valeur

Lors du passage d'un shared_ptr (depuis boost ou C 11 STL) à une fonction, le le choix entre le passer par référence const (void foo(const shared_ptr& p)) ou par valeur (void foo(shared_ptr p)) a été un sujet de débat.

Traditionnellement, il On pensait que le passage par référence serait plus rapide car cela éviterait les opérations de copie inutiles. Cependant, comme l'ont discuté les experts de C and Beyond 2011 (Scott, Andrei et Herb), ce n'est plus le cas.

Devriez-vous passer par valeur ou par référence ?

À moins qu'il n'y ait un besoin explicite de partager la propriété d'un objet (comme entre des structures de données ou des threads), il n'y a aucune raison impérieuse de transmettre un shared_ptr par valeur. Le passage par référence const est préférable pour les raisons suivantes :

  • Performance : Le passage par référence const est généralement plus rapide que la copie de shared_ptr par valeur, en particulier pour les objets volumineux. En effet, seul le pointeur lui-même est transmis, plutôt que l'objet entier.
  • Exactité : Le passage par référence const garantit que le shared_ptr ne peut pas être modifié dans la fonction. Cela permet d'éviter les modifications accidentelles de l'objet partagé.

Quand transmettre par valeur

La seule fois où il est conseillé de transmettre un shared_ptr par valeur est lorsque l'intention est de transférer la propriété de l'objet à la fonction. C'est généralement le cas lorsque la fonction doit assumer la responsabilité de la gestion de la durée de vie de l'objet.

Considérations supplémentaires

Pour des performances optimales, il est important de déterminer si le shared_ptr peut être optimisé pour les déplacements. Comme l'explique Scott Meyers, l'optimisation des déplacements peut éliminer le besoin d'opérations de copie inutiles. Cependant, cette optimisation n'est disponible que dans certaines versions de C .

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