2013-05-28 36 views
7

一般而言,深度複製Qt容器的正確方法是什麼?我並不擔心以遞歸方式深度複製容器,儘管解決此問題會有所幫助。如何深度複製QMap和其他Qt容器

+2

上述代碼適用於我 - 您爲什麼認爲它不會? – cmannett85

+0

@ cmannett85我已經通過GDB運行它,並看到兩個地圖都包含「value2」 –

+0

是的,我最初誤讀了代碼,這段代碼應該可以正常工作。刪除我的答案。 –

回答

11

儘管每個人都會告訴你 - 你不深刻複製Qt容器 - 有些情況下你只需要執行實際的深層複製而不是淺層複製。要做到這一點,請使用detach()

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

太棒了。這就是答案 –

+0

你能否舉一個你什麼時候需要這樣做的例子?當你修改'container1'時,它會執行深層複製,如果你不修改它 - 你爲什麼要複製它!? – cmannett85

+3

@ cmannett85就在昨天,我需要做到這一點。我有兩個線程,一個通過通道接收數據(類似於套接字),處理數據並將其存儲在幾個容器中。另一個線程通過定期檢查新數據來呈現數據。如果有新數據,它會鎖定一個互斥並從一些容器複製數據 - 這是我需要深度複製的地方。如果我沒有執行深度複製,則在數據處理線程修改它們時,會分別爲每個容器執行鎖定,這會降低性能。 – kralyk