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

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

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

异常对象在什么时候构造?

  1、与按值和按引用传递异常的方式相比,在按指针传递异常的方式下,异常对象的构造方式有很大的不同。它必须是在堆中动态构造的异常对象,或者是全局性static的变量。示例程序如下:

void main()

{

try

{

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

throw new MyMemoryException("ex_obj1");

}

catch(MyException* e)

{

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

delete e;

}

}

  2、注意,通过指针方式传递的异常对象不能是局部变量,否则后果很严重,示例如下:

void main()

{

try

{

// 局部变量,异常对象

MyMemoryException ex_obj1("ex_obj1");

// 抛出一个指针类型的异常

// 注意:这样做很危险,因为ex_obj1这个对象离开了这个作用域即

// 析构销毁

throw &ex_obj1;

}

catch(MyException* e)

{

// 下面语句虽然不会导致程序崩溃,但是e->GetName()取得的结果

// 也是不对的。

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

// 这条语句会导致程序崩溃

// delete e;

}

}

  程序运行的结果是:

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

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

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

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

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

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

void main()

{

try

{

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