2013-05-28 49 views
7

Nói chung, cách chính xác để sao chép sâu các thùng chứa Qt là gì? Tôi không lo lắng về việc sao chép sâu các thùng chứa đệ quy, mặc dù giải quyết như vậy sẽ rất hữu ích.Làm thế nào để sao chép sâu QMap và các thùng chứa Qt khác

+2

Mã trên hoạt động tốt cho tôi - tại sao bạn nghĩ nó sẽ không? – cmannett85

+0

@ cmannett85 Tôi đã chạy qua GDB và thấy rằng cả hai bản đồ đều chứa "value2" –

+0

Có, tôi đã đọc sai mã lúc đầu, đoạn mã này sẽ hoạt động tốt. Đang xóa câu trả lời của tôi. –

Trả lời

11

Mặc dù những gì mọi người sẽ nói với bạn - rằng bạn không sao chép sâu thùng chứa Qt - có những tình huống mà bạn chỉ cần thực hiện một bản sao sâu thay vì chỉ một vùng nông. Để thực hiện điều đó, hãy sử dụng detach():

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

Tuyệt vời. Đây là câu trả lời –

+0

Bạn có thể đưa ra ví dụ về thời điểm bạn cần thực hiện việc này không? Thời điểm bạn sửa đổi 'container1' nó sẽ thực hiện một bản sao sâu, nếu bạn không sửa đổi nó - tại sao bạn muốn sao chép nó !? – cmannett85

+3

@ cmannett85 Hôm qua tôi cần làm chính xác điều đó. Tôi có hai luồng, một luồng nhận dữ liệu qua một kênh (tương tự như socket), xử lý dữ liệu và lưu trữ nó trong một vài thùng chứa. Chủ đề khác hiển thị dữ liệu bằng cách kiểm tra định kỳ dữ liệu mới. Nếu có dữ liệu mới, nó sẽ khóa một mutex và sao chép dữ liệu từ một số vùng chứa - đây là nơi tôi cần phải sao chép sâu. Nếu tôi không thực hiện sao chép sâu, khóa sẽ được thực hiện cho từng thùng chứa riêng biệt khi luồng xử lý dữ liệu sửa đổi chúng, điều này sẽ làm giảm hiệu suất. – kralyk