考试网 >> IT认证 >> 水平 >> 软件指导 >> 分析构函数中抛出的异常

分析构函数中抛出的异常

发布时间:2006-06-28 05:19     点击:
分页:上一页  1 2 3 [4] 5  下一页

  许多朋友对这种结果也许会觉得傻了眼,这简直是莫名奇妙吗?这是谁的错呀!难道是新添加的那条代码的问题,但这完全不会呀!(其实很多程序员朋友受到过太多这种类似的冤枉,例如一个程序原来运行挺好的,以后进行功能扩充后,程序却时常出现崩溃现象。其实有时程序扩充时也没添加多少代码,而且相关程序员也很认真仔细检查自己添加的代码,确认后来添加的代码确实没什么问题呀!可相关的负责人也许不这么认为,觉得程序以前一直运行挺好的,经过你这一番修改之后就出错了,能不是你添加的代码所导致的问题吗?真是程序开发领域的窦娥冤呀!其实这种推理完全是没有根据和理由的,客观公正一点地说,程序的崩溃与后来添加的模块代码肯定是会有一定的相关性!但真正的bug也许就在原来的系统中一直存在,只不过以前一直没诱发表现出来而已!瞧瞧!主人公阿愚又岔题了,有感而发!还是回归正题吧!)

  那究竟是什么地方的问题呢?其实这实际上由于析构函数中抛出的异常所导致的,但这就更诧异了,析构函数中抛出的异常是没有问题的呀!刚才的一个例子不是已经测试过了吗?是的,但那只是一种假象。如果要想使你的系统可靠、安全、长时间运行无故障,你在进行程序的异常处理设计和编码过程中,至少要保证一点,那就是析构函数中是不永许抛出异常的,而且在C++标准中也特别声明到了这一点,但它并没有阐述真正的原因。那么到底是为什么呢?为什么C++标准就规定析构函数中不能抛出异常?这确实是一个非常棘手的问题,很难阐述得十分清楚。不过主人公阿愚还是愿意向大家论述一下它自己对这个问题的理解和想法,希望能够与程序员朋友们达成一些理解上的共识。

假如无法保证在析构函数中不发生异常,怎么办?

  其实还是有很好办法来解决的。那就是把异常完全封装在析构函数内部,决不让异常抛出函数之外。这是一种非常简单,也非常有效的方法。按这种方法把上面的程序再做一点改动,那么程序将避免了崩溃的厄运。如下:

class MyTest_Base

{

public:

virtual ~ MyTest_Base () 

{

cout << "开始准备销毁一个MyTest_Base类型的对象"<< endl;

// 一点小的改动。把异常完全封装在析构函数内部
分页:上一页  1 2 3 [4] 5  下一页
版权申明:未经书面授权请勿转载本站信息!!作品版权归所属媒体与作者所有!!
发表评论: 匿名发表 用户名: 查看评论
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容
本站提醒:不要进行人身攻击。谢谢配合。
在本站搜索相关信息
2003-2005 Ksw123.com All Rights Reserved. - TOP
Copyright © 2006 Ksw123.com. All rights reserved.中国考题网 版权所有