【发布时间】:2017-10-01 17:40:48
【问题描述】:
如果满足某个条件,我希望我的 C++ 代码停止运行并进行适当的对象清理;在类的构造函数中。
class A {
public:
int somevar;
void fun() {
// something
}
};
class B {
public:
B() {
int possibility;
// some work
if (possibility == 1) {
// I want to end the program here
kill code;
}
}
};
int main() {
A a;
B b;
return 0;
}
我如何在此时终止我的代码以进行适当的清理。众所周知,std::exit 不执行任何类型的堆栈展开,并且堆栈上的任何活动对象都不会调用其各自的析构函数来执行清理。所以std::exit 不是一个好主意。
【问题讨论】:
-
如果构造函数失败抛出异常。
-
调用 std::exit 之前的 std::atexit 怎么样?
-
@SeverinPappadeux - 这不会展开堆栈。并且必须进行实际上允许
std::atexit清理所有内容的管理,这违背了使用 C++ 的目的。我们有 RAII,我们应该使用它。 -
值得注意的是,
std::exit()将为所有全局对象调用析构函数(是的,它不会展开堆栈)。如果您想“杀死”该程序,您可以改用_exit()
标签: c++ c++11 c++14 exit exit-code