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

分析构函数中抛出的异常

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

};

void main()

{

try

{

// 构造一个对象,当obj对象离开这个作用域时析构将会被执行

MyTest_Base obj;

obj.Other();

}

catch(std::exception e)

{

cout << e.what() << endl;

}

catch(...)

{

cout << "unknow exception"<< endl;

}

}

   程序运行的结果是:

  开始准备销毁一个MyTest_Base类型的对象

  在析构函数中故意抛出一个异常,测试!

  从上面的程序运行结果来看,并没有什么特别的,在程序中首先是构造一个对象,当这个对象在离开它的作用域时,析构函数被调用,此时析构函数中抛出一个std::exception类型的异常,因此后面的catch(std::exception e)块捕获住这个异常,并打印出异常错误信息。这个过程好像显现出,发生在析构函数中的异常与其它地方发生的异常(如对象的成员函数中)并没有什么太大的不同,除了析构函数是隐式调用的以外,但这也丝毫不会影响到异常处理的机制呀!那究竟区别何在?玄机何在呢?继续往下看吧!

  2、在上面的程序基础上做点小的改动,程序代码如下:

void main()

{

try

{

// 构造一个对象,当obj对象离开这个作用域时析构将会被执行

MyTest_Base obj;

// 下面这条语句是新添加的

// 调用这个成员函数将抛出一个异常

obj.Func();

obj.Other();

}

catch(std::exception e)

{

cout << e.what() << endl;

}

catch(...)

{

cout << "unknow exception"<< endl;

}

}

  注意,修改后的程序现在的运行结果:非常的不幸,程序在控制台上打印一条语句后就崩溃了(如果程序是debug版本,会显示一条程序将被终止的断言;如果是release版本,程序会被执行terminate()函数后退出)。在主人公阿愚的机器上运行的debug版本的程序结果如下:
分页:上一页  1 2 [3] 4 5  下一页
版权申明:未经书面授权请勿转载本站信息!!作品版权归所属媒体与作者所有!!
发表评论: 匿名发表 用户名: 查看评论
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容
本站提醒:不要进行人身攻击。谢谢配合。
在本站搜索相关信息
2003-2005 Ksw123.com All Rights Reserved. - TOP
Copyright © 2006 Ksw123.com. All rights reserved.中国考题网 版权所有