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

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

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

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

  1、按传值的方式传递异常对象时,被抛出的异常都是局部变量,而且是临时的局部变量。什么是临时的局部变量,这大家可能都知道,例如发生函数调用时,按值传递的参数就会被临时复制一份,这就是临时局部变量,一般临时局部变量转瞬即逝。

  主人公阿愚对这开始有点不太相信。不会吧,谁说异常对象都是临时的局部变量,应该是普通的局部变量,甚至是全局性变量,而且还可以是堆中动态分配的异常变量。是的,这上面说的好象没错,但是实际真实发生的情况是,每当在throw语句抛出一个异常时,不管你原来构造的对象是什么性质的变量,此时它都会复制一份临时局部变量,还是具体看看例程吧!如下:

class MyException

{

public:

MyException (string name="none") : m_name(name)

{

cout << "构造一个MyException异常对象,名称为:"<<m_name<< endl;

}

MyException (const MyException& old_e)

{

m_name = old_e.m_name;

cout << "拷贝一个MyException异常对象,名称为:"<<m_name<< endl;

}

operator= (const MyException& old_e)

{

m_name = old_e.m_name;

cout << "赋值拷贝一个MyException异常对象,名称为:"<<m_name<< endl;

}

virtual ~ MyException () 

{

cout << "销毁一个MyException异常对象,名称为:" <<m_name<< endl;

}

string GetName() {return m_name;}

protected:

string m_name;

};

void main()

{

try

{

{

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

MyException ex_obj1("ex_obj1");

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