5

Cố mảnh làm đơn giản của việc mã:Moving std :: chủ đề

std::thread threadFoo; 

std::thread&& threadBar = std::thread(threadFunction); 

threadFoo = threadBar; // thread& operator=(thread&& other); expected to be called 

Bắt một lỗi:

use of deleted function 'std::thread& std::thread::operator=(const std::thread&)'

tôi một cách rõ ràng xác định threadBar như một tài liệu tham khảo rvalue, không phải là một bình thường. Tại sao nhà điều hành không mong đợi được gọi? Làm cách nào để di chuyển một chuỗi sang chuỗi khác?

Cảm ơn bạn!

Trả lời

12

Đã đặt tên là tham chiếu là các giá trị. Các giá trị không liên kết với các tham chiếu rvalue. Bạn cần sử dụng std::move.

threadFoo = std::move(threadBar); 
+0

Cảm ơn bạn đã trả lời. Tôi có làm cho nó đúng rằng một (và chỉ?) Cách các nhà điều hành dự kiến ​​có thể được sử dụng là với một đối tượng thread tạm thời như 'threadFoo = std :: thread (threadFunction);'? – Kolyunya

+1

Hoặc là một tham chiếu tạm thời hoặc không tên khi bạn nhận được từ 'std :: move'. –

+0

Cảm ơn bạn đã giải thích! – Kolyunya

Các vấn đề liên quan