【发布时间】:2015-07-18 18:44:08
【问题描述】:
#include <iostream>
class A
{
public:
A()
{
std::cout << "A()" << std::endl;
}
virtual ~A()
{
std::cout << "~A()" << std::endl;
}
};
class B:public A
{
public:
B()
{
throw std::exception();
std::cout << "B()" << std::endl;
}
~B()
{
std::cout << "~B()" << std::endl;
}
};
int main()
{
try
{
B b;
}
catch(std::exception & e)
{
}
return 0;
}
以上代码输出,
A()
~A()
当异常被抛出时,B 已经被创建。那么为什么不调用 B 的析构函数呢?
【问题讨论】:
-
只调用成功构造对象的析构函数。换句话说,你错误地说
B在抛出异常时已经创建。见this。
标签: c++ exception inheritance