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

分析构函数中抛出的异常

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

分析构函数在什么时候被调用执行?

  对于C++程序员来说,这个问题比较简单,但是比较爱唠叨的阿愚还是建议应该在此再提一提,也算回顾一下C++的知识,而且这将对后面的讨论和理解由一定帮助。先看一个简单的示例吧!如下:

class MyTest_Base

{

public:

virtual ~ MyTest_Base () 

{

cout << "销毁一个MyTest_Base类型的对象"<< endl;

}

};

void main()

{

try

{

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

MyTest_Base obj;

}

catch(...)

{

cout << "unknow exception"<< endl;

}

}

  编译运行上面的程序,从程序的运行结果将会表明对象的析构函数被执行了,但什么时候被执行的呢?按C++标准中规定,对象应该在离开它的作用域时被调用运行。实际上各个厂商的C++编译器也都满足这个要求,拿VC来做个测试验证吧!,下面列出的是刚刚上面的那个小示例程序在调试时拷贝出的相关程序片段。注意其中obj对象将会在离开try block时被编译器插入一段代码,隐式地来调用对象的析构函数。如下:

325: try

326: {

00401311 mov dword ptr [ebp-4],0

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

328: MyTest_Base obj;

00401318 lea ecx,[obj]

0040131B call @ILT+40(MyTest_Base::MyTest_Base) (0040102d)

329:

330: } // 瞧下面,编译器插入一段代码,隐式地来调用对象的析构函数

00401320 lea ecx,[obj]

00401323 call @ILT+15(MyTest_Base::~MyTest_Base) (00401014)

331: catch(...)

00401328 jmp __tryend$_main$1 (00401365)

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