5

Starając się wykonywać proste dzieło kodu:Moving std :: wątek

std::thread threadFoo; 

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

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

otrzymuję błąd:

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

jawnie zdefiniować threadBar jako odniesienie rvalue, a nie zwykłym jeden. Dlaczego nie wywołano spodziewanego operatora? Jak przenieść jeden wątek do drugiego?

Dziękujemy!

Odpowiedz

12

Nazwane referencje są wartościami l. Wartości L nie wiążą się z odniesieniami do wartości r. Musisz użyć std::move.

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

Dziękuję za odpowiedź. Czy mam rację, że jedyny (i jedyny?) Sposób, w jaki można użyć oczekiwanego operatora, to tymczasowy obiekt wątku typu 'threadFoo = std :: thread (threadFunction);'? – Kolyunya

+1

Dowolne tymczasowe lub nienazwane odniesienie otrzymane z 'std :: move'. –

+0

Dzięki za wyjaśnienie! – Kolyunya