析构函数会在以下两种情况下被调用:
1.对象正常释放时。
2.当对象被异常处理机制传播过程中的stack_unwinding(栈展开)机制摧毁。
但是,析构函数被调用时,可能会有一个异常正在作用。我们是无法区分这些状态的。我们必须假设这种情况发生,因为
如果控制权基于异常的因素离开析构函数,而此时正有另一个异常处于作用状态,c++会调用terminate函数,结束程序。
不要让异常跑出析构函数的第二个理由:
如果异常从析构函数中跑出,且没有在析构函数中被捕捉,会导致析构函数执行不全,即执行到异常抛出就没有了,会导致
析构函数执行不完全,导致资源泄漏。
综上:有两个好理由支持“权利阻止异常跑出析构函数”:
1,.可以避免terminate在异常传播过程中终止程序。
2.协助确保析构函数完成应该做的事情。
摘录自more effective c++条款11’