版权声明:本文为博主原创文章,转载请在文章开头给出原文链接。 https://blog.csdn.net/xiyanggudao/article/details/51758197
异常链中的对象似乎是由异常机制独立维护,而不是throw后面的对象,下面的程序调用了两次复制构造函数
static int c = 0;
class MyException
{
int id;
public:
MyException() : id(c++)
{
cout << "MyException()---------------" << id << endl;
}
MyException(MyException&) : id(c++)
{
cout << "MyException(MyException&)---" << id << endl;
}
void print_error()
{
cout << "MyException::print_error()--" << id << endl;
}
~MyException()
{
cout << "~MyException()--------------" << id << endl;
}
};
void f()
{
MyException e;
throw e;
}
int main()
{
try
{
f();
}
catch(MyException e)
{
e.print_error();
}
return 0;
}
运行结果
结果分析:
id为0的是f()函数中的局部MyException对象
id为1的是异常机制维护的MyException对象
id为2的是main()函数中的局部MyException对象