boost::mutex::scoped_lock
to poręczne opakowanie RAII do blokowania muteksu. Używam podobnej techniki do czegoś innego: wrapper RAII wokół pytania o interfejs danych w celu odłączenia/ponownego podłączenia do urządzenia szeregowego.W jaki sposób scoped_lock unika emitowania ostrzeżenia "nieużywane zmienne"?
Co nie mogę dowiedzieć się, chociaż, dlaczego w kodzie poniżej tylko mojego obiektu mst
— którego instancji i niszczenia mają skutki uboczne — przyczyny g++
do emitowania „niewykorzystaną zmienną” Ostrzeżenie błąd podczas l
zarządza milczeć.
Czy wiesz? Czy możesz mi powiedzieć?
[[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)
To trochę zbędne, aby zakończyć pytanie: "Czy wiesz, czy możesz mi powiedzieć?". : p – wilhelmtell
@wilhelmtell: Tylko jeden z nich jest zbędny; oba są _stylish_;) –
@ Tomalak Tylko jedna niezwiązana rzecz: Nie chciałbym zobaczyć zmiennej o nazwie 'l' w prawdziwym kodzie :) –