2013-05-28 9 views
7

Allgemein, was ist der richtige Weg, um Qt-Container tief zu kopieren? Ich mache mir keine Sorgen darüber, dass die Container rekursiv tief kopiert werden, obwohl das Adressieren einer solchen Datei hilfreich wäre.Wie man QMap und andere Qt-Container tief kopiert

+2

Der obige Code funktioniert gut für mich - warum denkst du, wird es nicht? – cmannett85

+0

@ cmannett85 Ich habe es durch GDB ausgeführt und gesehen, dass beide Karten "value2" enthalten –

+0

Ja, ich habe den Code zuerst falsch gelesen, sollte dieses Snippet gut funktionieren. Löschen meiner Antwort –

Antwort

11

Trotz allem, was jeder Ihnen sagen wird - dass Sie Qt-Container nicht tief kopieren - gibt es Situationen, in denen Sie einfach eine tatsächliche tiefe Kopie statt nur einer flachen durchführen müssen. Um dies zu tun, verwenden Sie detach():

container1 = container2; 
container1.detach(); 
+0

Ehrfürchtig. Dies ist die Antwort –

+0

Können Sie ein Beispiel geben, wann Sie dies tun müssten? In dem Moment, in dem Sie "container1" ändern, wird eine tiefe Kopie ausgeführt, wenn Sie sie nicht ändern - warum sollten Sie sie kopieren? – cmannett85

+3

@ cmannett85 Gerade gestern musste ich genau das tun. Ich habe zwei Threads, man empfängt Daten über einen Kanal (ähnlich wie Socket), verarbeitet die Daten und speichert sie in ein paar Containern. Der andere Thread rendert die Daten, indem er regelmäßig nach neuen Daten sucht. Wenn neue Daten vorhanden sind, sperrt es einen Mutex und kopiert Daten aus einigen Containern - hier muss ich einen tiefen Kopiervorgang durchführen. Wenn ich keine Tiefenkopie durchführen würde, würde das Sperren für jeden der Container getrennt erfolgen, wenn der Datenverarbeitungs-Thread sie modifiziert, was die Leistung beeinträchtigen würde. – kralyk

Verwandte Themen