Brunni (./351) :
Ben c'est comme si en C tu fais:
char *str1 = "Hello", *str2 = str1;
str2[1] = 'u';
printf("%s", str1); // Hullo
C'est un piège lié aux références en soi.
Effectivement. Mais justement, avec
QString, tu n'as pas ce problème:
QString str1 = "Hello", str2 = str1;
// À cet endroit, une seule copie de la chaîne existe.
str2[1] = 'u';
// et paf, copy-on-write, on a maintenant str1 qui vaut "Hello", str2 qui vaut "Hullo"
printf("%s", str1); // Hello

Et le plus cool, c'est que depuis Qt 4.0.0, tout ceci est thread-safe (au même titre que par exemple
int l'est: on peut toujours avoir des conflits si les 2 threads essaient d'utiliser
str1, mais avoir
str1 dans un thread et
str2 dans un autre, les 2 partageant les données, est sans danger, le copy-on-write est thread-safe).
Uther (./359) :
Mais attention quand on déclare une référence final, ca veux dire qu'on ne peut la modifier, mais on peut toujours modifier les attributs de l'objet, il n'y a pas d'équivalent aux méthodes const. Encore une simplification : c'est moins puissant que le const mais réduit également la complexité du concept.
C'est surtout une recette pour bogues non détectables, d'autant plus qu'il n'y a pas de copy-on-write.
