5

попробовав сделать простой кусок кода работы:Перемещение станд :: нить

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 как ссылку RValue, а не обычным. Почему не ожидается, что оператор будет вызван? Как переместить один поток в другой?

Спасибо!

ответ

12

Именованные ссылки являются значениями. Lvalues ​​не привязываются к rvalue-ссылкам. Вам нужно использовать std::move.

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

Благодарим за ответ. Правильно ли я понимаю, что единственный (и единственный?) Способ, которым ожидаемый оператор мог быть использован, - это временный объект потока, например 'threadFoo = std :: thread (threadFunction);'? – Kolyunya

+1

Либо временная, либо неназванная ссылка, которую вы получаете от 'std :: move'. –

+0

Спасибо за разъяснение! – Kolyunya

Смежные вопросы