我在我們的軟件中遇到了這樣一段代碼,它依靠析構函數釋放一個鎖。然而,當我運行程序時,析構函數永遠不會被調用,並且鎖定永遠不會被釋放。我們可以依靠析構函數多少?
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