关于C++异常问题
"异常对象并非创建在函数堆栈上,而是创建在专用的异常堆栈上,因此它才可以跨接多个函数传递到上层,否则在堆栈清退时,就会初销毁。"
上面这一段是来到自一本C++书籍。
可是小弟对上面这句话有些怀疑。
如下代码:
#include <iostream>
using std::cout;
using std::endl;
class A
{
public:
A ()
{
cout << "构造函数 A" << endl;
}
~ A ()
{
cout << "析构函数 A" << endl;
}
A (const A &)
{
cout << "复制构造函数 A" << endl;
}
};
class B
{
public:
B ()
{
cout << "构造函数 B" << endl;
}
~ B ()
{
cout << "析构函数 B" << endl;
}
};
void fun () throw ( A )
{
B b;
throw A(); // (1)
//throw &A(); // (2),传指针
}
int main ()
{
try
{
fun ();
}
catch ( A &) // (3)
//catch ( A *) // (4)
{
cout << "Exception A" << endl;
}
return 0;
}
以上代码在VC中通过,强果如下:
组合一((1)与(3)):
构造函数 B
构造函数 A
析构函数 B
Exception A
析构函数 A
如此看来,A(应该)构造在"专用的堆栈"上,请看组合二结果。
组合二((2)与(4)):
构造函数 B
构造函数 A
析构函数 A
析构函数 B
Exception A
如此来看,当用指针传递异时,A在B销毁之前被销毁,
如此看来,它不是在“专用的堆栈”中。
小弟一时不解啊,学习当中,望好心人帮忙。
Thank you very much!
“专用的堆栈”真的存在吗?