我在我们的软件中遇到了这样一段代码,它依靠析构函数释放一个锁。然而,当我运行程序时,析构函数永远不会被调用,并且锁定永远不会被释放。我们可以依靠析构函数多少?
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;
}
你怎么知道析构函数从来没有被调用过?你可以给一个完整的,最小的repro? – SirPentor 2013-03-06 01:58:55
除非你的程序使用特殊的系统调用来退出(例如'_exit()'),这几乎是不可能的,因为[C++是RAII之王](http://lazarenko.me/2013/03/03/automatic-资源管理/)。请发布一个演示问题的最小工作代码示例。 – 2013-03-06 01:59:16
这是基本的RAII,析构函数会被调用.. – 2013-03-06 01:59:28