5

Cercando la marca semplice pezzo di lavoro Codice:std :: Muoversi filo

std::thread threadFoo; 

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

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

ottenendo un errore:

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

definisco esplicitamente threadBar come riferimento rvalue, non un ordinario. Perché non viene chiamato l'operatore previsto? Come posso spostare un filo in un altro?

Grazie!

risposta

12

I riferimenti con nome sono lvalue. Gli Lvalues ​​non si legano ai riferimenti di valore. Devi usare std::move.

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

Grazie per la risposta. Ho capito bene che l'uno (e l'unico?) Modo in cui l'operatore previsto potrebbe essere usato è con un oggetto thread temporaneo come 'threadFoo = std :: thread (threadFunction);'? – Kolyunya

+1

O un riferimento temporaneo o anonimo come si ottiene da 'std :: move'. –

+0

Grazie per una spiegazione! – Kolyunya