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

C++的异常对象按指针方式被传递

发布时间:2006-06-28 05:21     点击:
分页:上一页  1 [2] 

throw new MyMemoryException("ex_obj1");

}

// 注意:这里是定义了按指针方式传递异常对象

catch(MyException* e)

{

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

delete e;

}

}

  程序运行的结果是:

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

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

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

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

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

  呵呵!程序的运行结果是不是显示出异常对象只有一次的构造过程。挺好挺好! 

异常对象什么时候被销毁

  异常对象动态地在堆上被创建,同时它也要动态的被销毁,否则就必然会发生内存泄漏。那么异常对象应该在什么时候被销毁比较合适呢?当然应该是在catch block块中处理完毕后再销毁它才比较合理。示例如下:

void main()

{

try

{

// 动态在堆中构造的异常对象

throw new MyMemoryException("ex_obj1");

}

catch(MyException* e)

{

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

// 这里需要显示的删除异常对象

delete e;

}

}

  指针方式下,异常对象会发生对象切片吗?

  当然不会,试都不用试,阿愚非常有把握确信这一点。

总结

  (1) 被抛出的异常对象不能是局部变量或临时变量,必须是在堆中动态构造的异常对象,或者是全局性static的变量;

  (2) 异常对象只会被构造一次; 

  (3) catch 后面带的异常对象的作用域仅限于catch bock中; 

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