Maison  >  Article  >  développement back-end  >  Dois-je passer shared_ptrs par référence ou par valeur en C ?

Dois-je passer shared_ptrs par référence ou par valeur en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-02 14:39:02831parcourir

Should I Pass shared_ptrs by Reference or by Value in C  ?

Passage de Shared_Ptrs : référence vs valeur

En C , lors du passage d'un shared_ptr (soit l'implémentation boost, soit le C 11 STL), les développeurs ont la possibilité de le transmettre par référence ou par valeur. La question se pose : quelle approche est la plus appropriée ?

Méthode de référence Const

Le passage par référence const (void foo(const shared_ptr& p)) n'a pas avantage en termes de performances par rapport au passage par la valeur. Cette idée fausse a été abordée par les sommités de C Scott Meyers, Andrei Alexandrescu et Herb Sutter lors de la session « Ask Us Anything » à C and Beyond 2011.

Passing by Value Method

Le passage par valeur (void foo(shared_ptr p)) est généralement préféré pour deux raisons :

  1. Pas de surcharge inutile :Le passage par valeur évite la création d'une référence temporaire, qui autrement introduirait une surcharge inutile.
  2. Cohérence avec sémantique : Le passage par valeur s'aligne sur la sémantique d'autres types de conteneurs (par exemple, vecteurs, listes), évitant ainsi toute confusion dans le codage pratiques.

Approche alternative

Cependant, dans des scénarios spécifiques où la propriété doit être partagée, la transmission par valeur peut être nécessaire. Par exemple, lors du transfert de propriété entre des structures de données ou des threads, le passage par valeur peut faciliter le transfert de propriété tout en assurant une bonne gestion de la mémoire.

Conclusion

En général, passer une référence shared_ptr par const n'offre aucun avantage tangible en termes de performances et n'est pas recommandée. La transmission par valeur est l'approche privilégiée, garantissant la cohérence et évitant les frais généraux inutiles.

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