Le move n'est pas un swap. C'est comme son nom l'indique : un transfert de contenu et de responsabilité.
Complémentaire ? Où ? Dans les cas d'utilisation initiaux du COW ? C'est à dire /in/ et /out/ de fonction, nullement. Le COW n'était qu'un palliatif à un (N)RVO pas toujours appliqué, à des rvalue-references inexistantes, et à des utilisateurs qui ne veulent pas apprendre à se servir de "const&". Concrètement, les besoins de partage de chaines sont des plus réduits, ou trop simplistes (le COW n'a aucun rapport avec les chaines qui ne sont que des vues à l'intérieur de chaines plus importantes -- il pourrait (presque), mais n'a jamais été utilisé pour cela à ma connaissance -- cf les iterator_range utilisables sur boost.split: http://www.boost.org/doc/libs/1_48_0/doc/html/string_algo/usage.html#id3115768)
Les rvalue-reference vont rendre caduc le besoin technique majeur qui a conduit au COW dans les implémentations de QString et de certaines (pré 2011) de std::string -- par "besoin technique", je n'inclue pas les utilisateurs qui préfèrent s'en tenir à un sous-ensemble du langage très réduit, limite pré-98, et qui préfèrent donc copier en entrée/sortie de fonction.
[^] # Re: sémantique move: précision
Posté par lmg HS (site web personnel) . En réponse à la dépêche Qt 4.8 est sorti. Évalué à 0.
Le move n'est pas un swap. C'est comme son nom l'indique : un transfert de contenu et de responsabilité.
Complémentaire ? Où ? Dans les cas d'utilisation initiaux du COW ? C'est à dire /in/ et /out/ de fonction, nullement. Le COW n'était qu'un palliatif à un (N)RVO pas toujours appliqué, à des rvalue-references inexistantes, et à des utilisateurs qui ne veulent pas apprendre à se servir de "const&". Concrètement, les besoins de partage de chaines sont des plus réduits, ou trop simplistes (le COW n'a aucun rapport avec les chaines qui ne sont que des vues à l'intérieur de chaines plus importantes -- il pourrait (presque), mais n'a jamais été utilisé pour cela à ma connaissance -- cf les iterator_range utilisables sur boost.split: http://www.boost.org/doc/libs/1_48_0/doc/html/string_algo/usage.html#id3115768)
Les rvalue-reference vont rendre caduc le besoin technique majeur qui a conduit au COW dans les implémentations de QString et de certaines (pré 2011) de std::string -- par "besoin technique", je n'inclue pas les utilisateurs qui préfèrent s'en tenir à un sous-ensemble du langage très réduit, limite pré-98, et qui préfèrent donc copier en entrée/sortie de fonction.