考试网 >> IT认证 >> 水平 >> 软件指导 >> C++的异常对象按传值的方式被复制和传递

C++的异常对象按传值的方式被复制和传递

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

异常对象按传值复制

  现在开始涉及到关键的地方,当catch block捕获到一个异常后,控制流准备转移到catch block之前,异常对象必须要通过一定的方式传递过来,假如是按传值传递(根据catch关键字后面定义的异常对象的数据类型),那么此时就会发生一次异常对象的拷贝构造过程。示例如下:

void main()

{

try

{

{

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

MyException ex_obj1("ex_obj1");

throw ex_obj1;

}

}

// 由于这里定义的是“按值传递”,所以这里会发生一次拷贝构造过程

catch(MyException e)

{

cout<<"捕获到一个MyException类型的异常,名称为:"<<e.GetName()<<endl;

}

}

  程序运行的结果是:

  构造一个MyException异常对象,名称为:ex_obj1

  拷贝一个MyException异常对象,名称为:ex_obj1

  拷贝一个MyException异常对象,名称为:ex_obj1

  销毁一个MyException异常对象,名称为:ex_obj1

  捕获到一个MyException类型的异常,名称为:ex_obj1

  销毁一个MyException异常对象,名称为:ex_obj1

  销毁一个MyException异常对象,名称为:ex_obj1

  通过结果可以看出确实又多发生了一次异常对象的拷贝复制过程,因此在catch block中进行错误处理时,我们可以放心存储异常对象,因为不管C++异常处理模型到底是采用什么方法,总之当前这个异常对象已经被复制到了当前catch block的作用域中。

异常对象什么时候被销毁

  通过上面的那个程序运行结果还可以获知,每个被拷贝复制出来的异常对象都会得到被销毁的机会。而且销毁都是在catch block执行之后,包括那个被抛出的属于临时局部变量的异常对象也是在执行完catch block之后,这很神奇吧!不过暂时先不管它。先搞清catch block中的那个按值拷贝传入的异常对象到底确切的是在什么时候被析构。示例如下:

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