4 Réponses :
afaik, lors de la copie du contenu (sur l'écriture), il appelle le constructeur de copie de chaque élément de la liste, comme dans le cas de STD :: Liste. P>
C'est une copie peu profonde. Une copie profonde des données se produit dans les coulisses la première fois que vous appelez une fonction non constituée sur la copie ou la liste d'origine. P>
... ou sur la liste d'origine! Fondamentalement, chaque fois que les données de la liste seraient modifiées, une copie profonde est créée.
Oh bien sûr! Merci, j'ai édité ma réponse pour éviter toute confusion à ceux qui ne lisent pas de commentaires.
Voulez-vous simplement faire un suivi que j'ai commis une erreur - si vous détenez une qlist ou QVector of Pointers, ne vous attendez pas à ce que le constructeur de copie en profondeur par défaut vous aide à faire de nouvelles instances de ce que ces indicateurs pointaient ...
Cette opération prend une durée constante, parce que qlist est implicitement partagé. p> blockQuote>
Si vous ne modifiez pas la liste, celles-ci sont partagées! Donc, derrière la scène, vous lisez à la même adresse les informations! p>
Si une instance partagée est modifiée, elle sera copié (copie-on-écriture), et cela prend du temps linéaire. P> blockQuote>
Mais si vous modifiez la liste de copies, il n'y a pas d'autre choix qui copie effectivement la liste! Et ainsi, vous avez un coût linéaire en fonction de la taille de la liste. p>
de Qt Doc sur copie sur la mémoire écrite et partagée: p>
Une copie profonde implique dupliquer un objet. Une copie peu profonde est une référence copier, c'est-à-dire juste un pointeur à un partagé Bloc de données. Faire une copie profonde peut être cher en termes de mémoire et de CPU. Faire une copie peu profonde est très rapide, parce que cela implique seulement de définir un pointeur et incrémentation de la référence compter. p> blockQuote>
Donc, si vous ne modifiez pas la liste, vous avez lu les informations à la même adresse que la liste donnée en tant que paramètre, elle s'appelle la copie peu profonde. Et si vous le modifiez, vous aurez une copie profonde de la liste. P>
Le constructeur de copie fait une copie rapide (peu profonde). Si vous modifiez ensuite la liste d'origine ou la copie, une copie profonde des données sera effectuée. P>
Si vous avez un doute, je vous suggère de relire la documénation sur la sémantique Copy-On-Ecrire. p>
Ceci est le même comportement que qstring, qlist, Qarray et de nombreuses autres classes QT. P>