le problème n'est généralement pas la taille de la structure en memoire mais plus le comportement lors de la copie.
si, en général, la taille de la structure de string est petite (un pointeur + la un entier pour stocker la taille de la string), le type a un comportement complexe lors de la copie (allocation, copie entre les deux chaine etc...)
donc on évite de copier inutilement les string.
c'est la même chose pour les smart pointer. Quand on les copie, ils vérifient les compteurs, peuvent potentiellement mettre à jours de weak ptr et démarrer le micro onde selon l'implémentation utilisé
donc, la régle général est de passer par const ref tout type dont la copie est couteuse (ceci incluant aussi les structures de taille importante).
Le seul cas ou je m'autorise de passer par valeur, c'est quand je sais que je vais faire une copie de l'objet pour le modifier dans ma fonction, ce qui est relativement rare.
Partager