C++ 异常throw抛出一个匿名对象的地址, catch捕获类型为该匿名对象的指针, 运行起来的效果是没有执行到catch下的异常输出, 对象就已经被释放掉了, 当改为抛出匿名对象时, catch处引用接收就不会发生这样的问题。
当抛出匿名对象时也就是说匿名对象被构建了, catch处的引用指向了这块对象。
抛出匿名对象地址跟抛出匿名对象后引用接收应该是一个意思吧? 我在catch处用指针接收这个地址为什么会被提前释放掉?
代码:
class A
{
public:
A() { cout << "默认构造" << endl; }
~A() { cout << "默认析构" << endl; }
A(const A &a) { cout << "拷贝构造" << endl; }
};
void work()
{
throw &A();
}
int main()
{
try{
work();
}
catch (A *a)
{
cout << "捕获到异常" << endl;
}
}
执行输出:
默认构造
默认析构
捕获到异常
可以看到还没输出异常信息就已经被析构了。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…