Comme ça, dans le meilleur des cas, il n'y a plus de copie (que des move), quand l'apellant peux faire des moves. Et dans le pire des cas, il n'y a toujours que 3 copies (comme avant). La différence c'est que ces 3 copies sont faite par l'appelant. (Ce qui a l'inconvénient de générer plus de code car chaque appelant doit faire les copie alors que avant les copies étaient mutualisées dans la fonction).
Mais ce n'est toujours pas parfait, car si m_careAboutAddress est false, il n'y avait que 2 copies dans le pire des cas avant, alors que maintenant il y 3 copies dans le pire des cas. Bref, il n'y a pas de solution magique :-(
[^] # Re: Intéressant
Posté par Gof (site web personnel) . En réponse à la dépêche Je crée mon jeu vidéo E09 : Techniques de C++11 appliquées au système à entités. Évalué à 2.
Comme dit zu, tu n'aura pas d'erreur. Ça passe très bien, et sans copie
Sinon, la grande question est: faut il passer par valeur ou par référence?
imagine un setteur qui en C++03 ressemble à ça:
Tu ne va pas te taper 6 variantes avec toutes les possibilité de rvalue ou value. Ce que tu fais c'est:
Comme ça, dans le meilleur des cas, il n'y a plus de copie (que des move), quand l'apellant peux faire des moves. Et dans le pire des cas, il n'y a toujours que 3 copies (comme avant). La différence c'est que ces 3 copies sont faite par l'appelant. (Ce qui a l'inconvénient de générer plus de code car chaque appelant doit faire les copie alors que avant les copies étaient mutualisées dans la fonction).
Mais ce n'est toujours pas parfait, car si
m_careAboutAddressestfalse, il n'y avait que 2 copies dans le pire des cas avant, alors que maintenant il y 3 copies dans le pire des cas. Bref, il n'y a pas de solution magique :-(