分页:
[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 下一页