C'è una cosa su std::thread
che non capisco: perché il costruttore di std::thread
accetta la funzione per l'esecuzione di rvalue?Perché la funzione std :: thread assume l'esecuzione per valore?
In genere, voglio eseguire un Functor con alcuni membri su un altro thread. Come questo:
struct Function
{
void operator() (/* some args */)
{
/* some code */
}
/* some members */
}
void run_thread()
{
Functor f(/* some data */);
std::thread thread(f, /* some data */);
/* do something and wait for thread to finish */
}
Con implementazione corrente di std::thread
devo essere sicuro che il mio oggetto sta attuando la semantica move. Non capisco perché non posso passarlo per riferimento.
La domanda in più è: cosa significa riferirsi alla funzione per valore? Espressione Lambda?
Il costruttore 'std :: thread' ha la funzione di inoltro di riferimento. –
L'oggetto non ha bisogno di implementare la semantica del movimento. Se lo spostamento non è supportato, si limita a ricorrere alla copia. – nwp
@nwp: cosa succede se l'oggetto ha cancellato il costruttore di copie? Perché è necessaria la copia? –