析构函数抛出异常会导致后面的清理资源语句得不到机会执行,会导致资源泄漏。
结论:
a.析构函数绝对不要吐出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下(不传播)他们或者结束程序。
b.如果客户需要对某个操作函数运行期间抛出异常做出反应,那么class应该提供一个普通函数(而非在析构函数中)执行该操作,例如:
对于一个连接对象DBConnect他应该公开一个close函数,这个函数可能会抛出异常,应该让客户去调用close,而不是自己在析构函数中调用close。