有没有可能在不跳过析构函数调用的情况下终止软件执行?例如,在下面的代码中,由于exit(1)
语句的存在,test
的析构函数将永远不会被调用。
#include <iostream>
#include <cstdlib>
using namespace std;
class A{
public:
A(){cout << "Constructed.\n";}
~A(){cout << "Destroyed.\n";}
};
void func()
{
//Assuming something went wrong:
exit(1);
}
int main(int argc, char *argv[])
{
A test;
func();
return 0;
}
我需要的是一种在程序结束前(从
func()
内部)调用所有必要析构函数的方法。到目前为止,我一直通过func()
的返回值来处理它,例如:bool func()
{
//Assuming something went wrong:
return false;
}
int main(int argc, char *argv[])
{
A test;
if( !func() )return 1;
return 0;
}
这种方法的问题在于,一旦需要将其应用于一系列嵌套函数,管理起来会变得非常烦人(并且代码膨胀)。
有没有一种类似于第一个示例(在任何位置调用
exit(1)
)的语法,可以实现第二个示例(正确的析构函数调用)的相同结果?
exit
,而是抛出异常并在main
级别捕获它。 - Kerrek SB