Tu écrivais là un mutateur (chose rarement utile je trouve ...). Obligatoirement il y a une recopie.
En interne dans les fonctions de S, si v_ doit être initialisé depuis une autre fonction (externe à S cette fois) qui renvoie un vecteur, j'utiliserais directement swap() sur v_.
Il est difficile de parler de manière générale. Suivant le problème, soit la copie n'est pas grave, soit on a directement ou indirectement (via un back_inserter p.ex.) accès à v_.
Ce qui est certain, c'est que l'on va éviter d'avoir des std::vector<>*, au pire des cas on aurait des boost::shared_ptr<vector<> >. Mais quand on a des design avec un vecteur partagé entre plein d'objets, et qu'on ne peut pas vraiment décider d'un propriétaire, et que l'on a des fonctions qui renvoient des vecteurs entiers plutôt que de venir remplir directement le vecteur destinataire.
Partager