D'autres me semblent plus tendu à mettre en place (typiquement les move).
Au contraire, les move sont utilisés. Par exemple, si on utilise des retour de fonction par valeur plutôt que par argument, on va utiliser les move. Et il y a plein de cas où ça sert, comme les constructeurs. Petit exemple :
Dans le cas de f1, tu crée un objet std::string et tu fais une copie dans m_bar (donc allocation et copie du contenu). Dans le cas de f2, tu crées un objet std::string et tu le déplaces donc pas d'allocation et pas de copie de contenu, juste un pointeur. Donc, dans ce cas là, tu es gagnant à utiliser un std::move. Et dans le cas où tu utilises une chaîne, ça ne change presque rien : dans f3 tu fais la copie dans le constructeur, dans f4 tu fais la copie au moment de l'appel.
[^] # Re: À suivre?
Posté par rewind (Mastodon) . En réponse au journal C++ Core Guidelines. Évalué à 2.
Au contraire, les move sont utilisés. Par exemple, si on utilise des retour de fonction par valeur plutôt que par argument, on va utiliser les move. Et il y a plein de cas où ça sert, comme les constructeurs. Petit exemple :
Dans le cas de
f1, tu crée un objetstd::stringet tu fais une copie dansm_bar(donc allocation et copie du contenu). Dans le cas def2, tu crées un objetstd::stringet tu le déplaces donc pas d'allocation et pas de copie de contenu, juste un pointeur. Donc, dans ce cas là, tu es gagnant à utiliser unstd::move. Et dans le cas où tu utilises une chaîne, ça ne change presque rien : dansf3tu fais la copie dans le constructeur, dansf4tu fais la copie au moment de l'appel.