这是《Effective C++》的第八条原则。主要说的是程序出现的异常不要从析构函数这里漏掉,也就是说析构函数应该承担起拦截异常的责任才行。如果异常越过了析构函数这一关,流窜到其他地方去,那么就会造成程序提早结束或者未知的风险,这个后果就很严重了。
对付这种情况通常有两种简单粗暴的手段:1、在析构函数内发现异常,立刻捕捉到并且结束整个程序;2、在析构函数中发现异常,立刻捕捉到并将其扼杀,掩人耳目,继续执行程序。
其中第一种手段比第二种手段要好,这是为啥呢?因为方法1直接结束程序,其结果是可预料的,不会造成太大破坏。而方法2你这个异常是终止了,但是程序中其他部分与这个功能相关的势必会造成影响,也许还会因此带来其他异常的连锁反应,这个就不好办了。
不过以上这两种方法都没能去正面处理出现的异常,所以这两种方法都不提倡。
书中给出的解决方案是,再创建一个类用来处理异常,在这个类中有一个成员函数专门用来处理原来的类中的异常。而这个成员函数是调用原类中的异常处理来完成的,这实际上就是变相的让原类自己处理异常,这是第一道关卡。然后异常处理类的析构函数中也有一份处理异常的代码,这部分是异常处理类自己的,这是第二道关卡。这个就是双保险,如果说在第二道关卡仍然不能有效处理异常,那没办法了,只能强行关闭程序了。
再总结一下本原则就是无论如何也不能让异常突破析构函数这一关。
原则8:别让异常逃离析构函数
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 如果你是个对创意有热诚的人,进入一家创意热店,应该是你要全力以赴的目标。每个人都是从菜鸟出发,创意界从来欢迎有头脑...