Le COW sur les chaines et autres classes en C++ est avant toute une optimisation tournée vers les perfs. On pouvait y gagner sur les sorties de fonctions quand le (N)RVO ne s'appliquait pas, ou les stockages dans des conteneurs/tableaux.
Du coup avec l'arrivée de la sémantique de déplacement en C++, le seul intérêt restant est effectivement le partage de mémoire.
Vu le surtout à l'exécution (lock atomique qui n'est pas si gratuit que cela -> http://www.gotw.ca/gotw/045.htm), je doute que le COW soit maintenu à termes dans Qt (quoiqu'ils n'ont toujours pas ni namespace ni exceptions ...). D'ailleurs, si la chaine standard du C++11 a été rendue incompatible avec le COW, c'est bien tout sauf involontaire: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2668.htm
Le problème est que le partage de chaine serait le bienvenu sur les chaines immuables. Avec le COW, on a une sorte de tout-terrain qui certes passe partout, mais qui consomme plus.
[^] # 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é à 1.
Le COW sur les chaines et autres classes en C++ est avant toute une optimisation tournée vers les perfs. On pouvait y gagner sur les sorties de fonctions quand le (N)RVO ne s'appliquait pas, ou les stockages dans des conteneurs/tableaux.
Du coup avec l'arrivée de la sémantique de déplacement en C++, le seul intérêt restant est effectivement le partage de mémoire.
Vu le surtout à l'exécution (lock atomique qui n'est pas si gratuit que cela -> http://www.gotw.ca/gotw/045.htm), je doute que le COW soit maintenu à termes dans Qt (quoiqu'ils n'ont toujours pas ni namespace ni exceptions ...). D'ailleurs, si la chaine standard du C++11 a été rendue incompatible avec le COW, c'est bien tout sauf involontaire: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2668.htm
Le problème est que le partage de chaine serait le bienvenu sur les chaines immuables. Avec le COW, on a une sorte de tout-terrain qui certes passe partout, mais qui consomme plus.