boost::mutex::scoped_lock
es una práctica envoltura RAII alrededor del bloqueo de un mutex. Utilizo una técnica similar para otra cosa: una envoltura de RAII alrededor de la cual se pide a una interfaz de datos que se separe o se vuelva a conectar a un dispositivo en serie.¿Cómo evita scoped_lock emitir una advertencia de "variable no utilizada"?
Lo que no puedo entender, sin embargo, es por eso que en el código de abajo solamente mi objetivo mst
— cuya ejemplificación y la destrucción tienen efectos secundarios — causas g++
para emitir una "variable sin usar" error de advertencia mientras que gestiona l
a guardar silencio.
¿Sabes? ¿Usted pude decirme?
[[email protected] ~]$ cat test.cpp
#include <boost/shared_ptr.hpp>
#include <boost/thread/mutex.hpp>
#include <iostream>
struct MyScopedThing;
struct MyWorkerObject {
void a() { std::cout << "a"; }
void b() { std::cout << "b"; }
boost::shared_ptr<MyScopedThing> getScopedThing();
};
struct MyScopedThing {
MyScopedThing(MyWorkerObject& w) : w(w) {
w.a();
}
~MyScopedThing() {
w.b();
}
MyWorkerObject& w;
};
boost::shared_ptr<MyScopedThing> MyWorkerObject::getScopedThing() {
return boost::shared_ptr<MyScopedThing>(new MyScopedThing(*this));
}
int main() {
boost::mutex m;
boost::mutex::scoped_lock l(m);
MyWorkerObject w;
const boost::shared_ptr<MyScopedThing>& mst = w.getScopedThing();
}
[[email protected] ~]$ g++ test.cpp -o test -lboost_thread -Wall
test.cpp: In function ‘int main()’:
test.cpp:33: warning: unused variable ‘mst’
[[email protected] ~]$ ./test
ab[[email protected] ~]$ g++ -v 2>&1 | grep version
gcc version 4.4.5 20110214 (Red Hat 4.4.5-6) (GCC)
Es un poco redundante terminar una pregunta con "¿Sabes? ¿Me puedes decir?". : p – wilhelmtell
@wilhelmtell: solo uno de ellos es redundante; ambos son _stylish_;) –
@Tomalak Solo una cosa no relacionada: odiaría ver una variable llamada 'l' en código real :) –