¿Es necesario usar un temporal aquí para que sea seguro para subprocesos?¿El retorno es atómico y debería usarlo temporalmente en getter para que sea seguro para subprocesos?
int getVal() {
this->_mutex.lock();
int result = this->_val;
this->_mutex.unlock();
return result;
}
te daré el desmontaje de la función simple prueba RAII
int test()
{
RAIITest raii; //let's say it's a scoped lock
return 3;
}
{
0x004013ce <_Z4testv>: push %ebp
0x004013cf <_Z4testv+1>: mov %esp,%ebp
0x004013d1 <_Z4testv+3>: sub $0x28,%esp
return 3;
0x004013d4 <_Z4testv+6>: lea -0x18(%ebp),%eax
0x004013d7 <_Z4testv+9>: mov %eax,(%esp)
0x004013da <_Z4testv+12>: call 0x4167a0 <_ZN8RAIITestD1Ev> //here destructor is called
0x004013df <_Z4testv+17>: mov $0x3,%eax //here result is pushed onto the stack
}
0x004013e4 <_Z4testv+22>: leave
0x004013e5 <_Z4testv+23>: ret
el compilador gcc es/g ++ 3.4.5
::: Accidentalmente, lea esto como C# y VTC. lo siento. – Brian
No veo lo que su ejemplo de RAII se supone que debe probar. Al devolver una constante solo se le grita al compilador que está bien hacer trampa y optimizar porque el valor de retorno no se verá afectado. – jalf