Dans le C ++ traditionnel, le passage par valeur dans les fonctions et les méthodes est lent pour les objets volumineux et est généralement mal vu. Au lieu de cela, les programmeurs C ++ ont tendance à passer des références, ce qui est plus rapide, mais qui introduit toutes sortes de questions compliquées autour de la propriété et en particulier de la gestion de la mémoire (dans le cas où l'objet est alloué en tas)
Maintenant, en C ++ 11, nous avons des références Rvalue et des constructeurs de déplacement, ce qui signifie qu'il est possible d'implémenter un objet volumineux (comme un std::vector
) qui est bon marché à passer par valeur dans et hors d'une fonction.
Alors, cela signifie-t-il que la valeur par défaut devrait être de passer par valeur pour les instances de types tels que std::vector
et std::string
? Qu'en est-il des objets personnalisés? Quelle est la nouvelle meilleure pratique?
const std::string&
une copie et non une copie. Le premier fil est ensuite sorti ...
pass by reference ... which introduces all sorts of complicated questions around ownership and especially around memory management (in the event that the object is heap-allocated)
. Je ne comprends pas en quoi c'est compliqué ou problématique pour la propriété? Peut-être ai-je raté quelque chose?