Ho una domanda relativa all'utilizzo di boost::lock_guard
(o blocchi con scope simili) e l'utilizzo di variabili che devono essere protette dal blocco in un'istruzione return
.Come utilizzare lock_guard quando si restituiscono dati protetti
Come è l'ordine di distruggere oggetti locali e copiare il valore restituito? In che modo l'ottimizzazione del valore di ritorno influisce su questo?
Esempio:
Data Class::GetData()
{
boost::lock_guard<boost::mutex> lock(this->mMutex);
return this->mData;
}
questo sarebbe corretto (se mData è la variabile protetto da mMutex)? Oppure avrei dovuto utilizzare un ambito locale e una come temporanea mostrato nell'esempio qui sotto:
Data Class::GetData()
{
Data ret;
{
boost::lock_guard<boost::mutex> lock(this->mMutex);
ret = this->mData;
}
return ret;
}