Les trois premiers appels se contentent de passer un pointeur (une référence c'est pointeur caché) et sont donc aussi rapides l'un que l'autre. g(shr_b) a besoin de créer un temporaire de type shared_ptr<A> et une copie de shared_ptr est coûteuse à cause de l'état partagé.
En pratique, si g n'a pas besoin de posséder la ressource, il faut mieux utiliser pointeur nu ou un weak_ptr. Si g a besoin de la posséder, il faut mieux passer le shared_ptr par valeur: il y a une copie au moment de l'appel dans tous les cas, mais on peut le déplacer par le suite si besoin.
# Un temporaire en plus
Posté par Clément V . En réponse au journal Le quiz c++ de l'été. Évalué à 6.
Les trois premiers appels se contentent de passer un pointeur (une référence c'est pointeur caché) et sont donc aussi rapides l'un que l'autre.
g(shr_b)a besoin de créer un temporaire de typeshared_ptr<A>et une copie deshared_ptrest coûteuse à cause de l'état partagé.En pratique, si
gn'a pas besoin de posséder la ressource, il faut mieux utiliser pointeur nu ou unweak_ptr. Siga besoin de la posséder, il faut mieux passer leshared_ptrpar valeur: il y a une copie au moment de l'appel dans tous les cas, mais on peut le déplacer par le suite si besoin.