2013-05-28 14 views
7

In generale, qual è il modo corretto di copiare in profondità i contenitori Qt? Non sono preoccupato per la copia profonda dei contenitori in modo ricorsivo, sebbene l'indirizzamento sarebbe utile.Come copiare in profondità QMap e altri contenitori Qt

+2

Il codice sopra funziona bene per me - Perché pensi che non lo farà? – cmannett85

+0

@ cmannett85 L'ho eseguito tramite GDB e ho visto che entrambe le mappe contengono "value2" –

+0

Sì, ho interpretato male il codice in un primo momento, questo frammento dovrebbe funzionare correttamente. Cancellando la mia risposta. –

risposta

11

Nonostante quello che tutti ti diranno - che non copi in profondità i contenitori Qt - ci sono situazioni in cui devi semplicemente eseguire una copia profonda effettiva invece di una poco profonda. Per fare questo, utilizzare detach():

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

Fantastico. Questa è la risposta –

+0

Puoi dare un esempio di quando avresti bisogno di fare questo? Nel momento in cui modifichi 'container1' si esegue una copia profonda, se non la si modifica - perché dovresti copiarla? – cmannett85

+3

@ cmannett85 Proprio ieri ho dovuto fare esattamente questo. Ho due thread, uno riceve i dati su un canale (simile al socket), elabora i dati e li memorizza in un paio di contenitori. L'altro thread esegue il rendering dei dati verificando periodicamente nuovi dati. Se ci sono nuovi dati, blocca un mutex e copia i dati da alcuni dei contenitori - questo è il posto dove ho bisogno di eseguire una copia profonda. Se non eseguissi la copia profonda, il blocco sarebbe eseguito separatamente per ciascuno dei contenitori quando il thread di elaborazione dati li modifica, il che ridurrebbe le prestazioni. – kralyk

Problemi correlati