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

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

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

// 注意这时VC编译器会复制一份新的异常对象,临时变量

throw ex_obj1;

}

}

catch(...)

{

cout<<"catch unknow exception"<<endl;

}

}

  程序运行的结果是:

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

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

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

  catch unknow exception

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

  瞧见了吧,异常对象确实是被复制了一份,如果还不相信那份异常对象是在throw ex_obj1这条语句执行时被复制的,你可以在VC环境中调试这个程序,再把这条语句反汇编出来,你会发现这里确实插入了一段调用拷贝构造函数的代码。

  2、而且其它几种抛出异常的方式也会有同样的结果,都会构造一份临时局部变量。执着的阿愚可是每种情况都测试了一下,代码如下:

// 这是全局变量的异常对象

// MyException ex_global_obj("ex_global_obj");

void main()

{

try

{

{

// 构造一个异常对象,这是局部变量

MyException ex_obj1("ex_obj1");

throw ex_obj1;

// 这种也是临时变量

// 这种方式是最常见抛出异常的方式

//throw MyException("ex_obj2");

// 这种异常对象原来是在堆中构造的

// 但这里也会复制一份新的异常对象

// 注意:这里有资源泄漏呦!

//throw *(new MyException("ex_obj2"));

// 全局变量

// 同样这里也会复制一份新的异常对象

//throw ex_global_obj;

}

}

catch(...)

{

cout<<"catch unknow exception"<<endl;

}

  大家也可以对每种情况都试一试,注意是不是确实无论哪种情况都会复制一份本地的临时变量了呢!
分页:上一页  1 [2] 3 4 5 6 7 8 9  下一页
版权申明:未经书面授权请勿转载本站信息!!作品版权归所属媒体与作者所有!!
发表评论: 匿名发表 用户名: 查看评论
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容
本站提醒:不要进行人身攻击。谢谢配合。
在本站搜索相关信息
2003-2005 Ksw123.com All Rights Reserved. - TOP
Copyright © 2006 Ksw123.com. All rights reserved.中国考题网 版权所有