原则8:别让异常逃离析构函数

这是《Effective C++》的第八条原则。主要说的是程序出现的异常不要从析构函数这里漏掉,也就是说析构函数应该承担起拦截异常的责任才行。如果异常越过了析构函数这一关,流窜到其他地方去,那么就会造成程序提早结束或者未知的风险,这个后果就很严重了。
对付这种情况通常有两种简单粗暴的手段:1、在析构函数内发现异常,立刻捕捉到并且结束整个程序;2、在析构函数中发现异常,立刻捕捉到并将其扼杀,掩人耳目,继续执行程序。
其中第一种手段比第二种手段要好,这是为啥呢?因为方法1直接结束程序,其结果是可预料的,不会造成太大破坏。而方法2你这个异常是终止了,但是程序中其他部分与这个功能相关的势必会造成影响,也许还会因此带来其他异常的连锁反应,这个就不好办了。
不过以上这两种方法都没能去正面处理出现的异常,所以这两种方法都不提倡。
书中给出的解决方案是,再创建一个类用来处理异常,在这个类中有一个成员函数专门用来处理原来的类中的异常。而这个成员函数是调用原类中的异常处理来完成的,这实际上就是变相的让原类自己处理异常,这是第一道关卡。然后异常处理类的析构函数中也有一份处理异常的代码,这部分是异常处理类自己的,这是第二道关卡。这个就是双保险,如果说在第二道关卡仍然不能有效处理异常,那没办法了,只能强行关闭程序了。
再总结一下本原则就是无论如何也不能让异常突破析构函数这一关。

你可能感兴趣的:(原则8:别让异常逃离析构函数)