323 votes

shared_ptr par référence ou par valeur ?

Quand une fonction doit prendre un `` vous passez il (à partir de boost ou C ++11 STL),

  • par référence const :``
  • ou par valeur : `` ?

Je préfère la première méthode car je soupçonne qu’il est plus rapide. Mais est-ce vraiment la peine un bien ou y a-t-il d’autres problèmes ?

Edit : Pourriez-vous s’il vous plaît donner les raisons de votre choix ou si le cas, pourquoi vous pensez qu’il n’a pas d’importance.

264voto

mloskot Points 13971

Cette question a été discutée et a répondu par Scott, Andrei et d'Herbes pendant de Nous Poser session au cours de C++ et au-Delà de 2011. Regarder à partir de 4min 34sec sur shared_ptr de la performance et de l'exactitude.

Peu de temps, il n'y a aucune raison de passer par valeur, sauf s'il est multi-thread en cours, mais cela doit être considéré séparément.

À moins que, vous pouvez déplacer-l'optimiser comme l'a expliqué Scott Meyers dans le parler de la vidéo ci-dessus, mais qui est liée à la version actuelle de C++, vous pouvez utiliser.

Une mise à jour majeure de cette discussion qui s'est passé au cours de GoingNative 2012 conférence Interactive: Panneau de Nous Demander Quoi que ce soit! ce qui est intéressant à observer, surtout à partir de 22:50.

122voto

acel Points 41

Voici Herb Sutter prendre

Ligne directrice: Ne pas passer un pointeur intelligent comme paramètre d'une fonction, à moins que vous souhaitez utiliser ou de manipuler le pointeur intelligent lui-même, comme à de partager ou de transférer la propriété.

Ligne directrice: Exprimer une fonction qui permet de stocker et de partager la propriété d'un objet tas à l'aide d'une valeur shared_ptr paramètre.

Ligne directrice: l'Utilisation d'un non-const shared_ptr& paramètre uniquement de modifier les shared_ptr. L'utilisation d'un const shared_ptr& comme paramètre uniquement si vous n'êtes pas sûr de savoir si ou vous allez prendre une copie et de l'actionnariat; sinon, utiliser widget* au lieu (ou si non nullable, un widget&).

75voto

Evan Teran Points 42370

Personnellement, j’utiliserais un `` référence. Il n’y a aucune nécessité pour incrémenter le compteur de référence juste pour décrémenter il à nouveau dans un souci d’un appel de fonction.

40voto

Nikolai N Fetissov Points 52093

Passer `` référence, il est plus rapide. Si vous devez stocker, par exemple dans un récipient, le nombre de Réf. sera auto-magiquement incrémenté par l’opération de copie.

-6voto

stonemetal Points 4734

shared_ptr n’est pas assez grand, pas plus que son constructor\destructor faire suffisamment de travail pour y pour utiliser suffisamment de charge de la copie se soucier du passage par référence vs passent par la performance de la copie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X