5

嘗試進行簡單的一塊代碼的工作:移動的std ::線程

std::thread threadFoo; 

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

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

得到一個錯誤:

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

我明確界定threadBar爲右值引用,而不是普通的一個。爲什麼不要求運營商被叫?如何將一個線程移動到另一個線程?

謝謝!

回答

12

命名爲引用是左值。左值不綁定右值引用。您需要使用std::move

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

謝謝你的回答。我是否正確地使用期望的操作符可以使用的一個(也是唯一的?)方法是使用臨時線程對象,如'threadFoo = std :: thread(threadFunction);'? – Kolyunya

+1

您從'std :: move'獲得的臨時或未命名引用。 –

+0

感謝您的解釋! – Kolyunya