2015-08-21 13 views
8

Durante la lettura su multithreading in C++ 11, ho notato che alcuni tutorial fanno questo:È sicuro chiamare funzioni membro non const per oggetti rvalue?

std::thread(print_message, "Hello").detach(); 

// instead of... 

std::thread t(print_message, "Hello"); 
t.detach(); 

Le mie domande sono:

  1. In generale, è sicuro per chiamare le funzioni di membro non-const per oggetti temporanei (valore)?
  2. In particolare, è sicuro farlo per un C++ 11 std::thread?
+1

Per il punto 1: è possibile chiamare le funzioni membro che non hanno una precondizione (per i tipi di classe ecc nello spazio dei nomi std). –

risposta

10
  1. Sì: la funzione non-const viene eseguito mentre l'oggetto è ancora vivo, quindi non c'è nessun problema.
  2. Sì: std::thread si comporta come qualsiasi altro tipo.
+2

Dovremmo anche ricordare che quando si chiama 'detach', il thread padre di solito non si preoccupa di mantenere un riferimento al bambino. Quando si chiama 'join', tuttavia, dovrebbe. – AndyG

5

Per elaborare più sulla seconda questione, il std::thread oggetto temporaneo si comporta come qualsiasi altro oggetto temporaneo:

e distrutto dopo l'full expression è destinato a viene valutata, che significa the destructor viene sempre chiamato dopo la Chiamata .detach() - std::terminate() non viene chiamato.

Problemi correlati