ロックを解放するためにデストラクタに依存する SW で、このコードを見つけました。しかし、プログラムを実行すると、デストラクタが呼び出されず、ロックが解放されませんでした。
bool someClass::someFunc()
{
Locker lock(m_lock); //take lock in constructor, release lock in Locker destructor
return something;
}
ここで何がうまくいかないのですか?コンパイラはこの関数をインラインに最適化できますか?
class Locker {
public:
Locker(Lock& lock) : m_lock(lock) { m_lock.lock(); }
~Locker() { m_lock.unlock(); }
protected:
Lock& m_lock;
}