考虑这段小代码,它实际上是更大代码库的一部分:
.htaccess
对于我的特定情况,输出结果是
class A
{
public:
A()
{
std::cout << "A" << std::endl;
}
~A()
{
std::cout << "~A" << std::endl;
}
};
void f()
{
A a;
throw;
}
void g()
{
try
{
f();
}
catch(...)
{
std::cout << "Caught" << std::endl;
}
}
似乎不是被捕获的异常,程序才被终止。但是,如果我删除了A的构造函数,则 会被捕获。
如果不仔细分析代码,是否有可能知道是什么导致了这种行为?
答案 0 :(得分:14)
没有操作数的 throw-expression ,如代码所示:
std::terminate
。我假设在处理异常时f()
而不是被调用(我想你直接从main
或其他东西调用它)。因此,std::terminate
被称为。{/ p>
对象a
无关紧要。