我希望我的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
不是一个好主意。
您应该抛出一个异常,当构造函数失败时,如下:
B() {
if(somethingBadHappened)
{
throw myException();
}
}
确保在main()
和所有线程条目功能中捕获异常。
在投掷构造函数的异常时阅读更多。阅读有关堆栈放松的信息,我该如何处理失败的驱动器。
不可能仅从构造函数执行。如果您提出异常,则需要在入口点设置适当的异常处理代码,因为如果您只是抛出了无法处理的例外,则允许编译器跳过堆栈放松并清理。
如果您不想使用使用异常,则可以在B
类中具有启动方法,该方法返回返回代码:
class B {
public:
B(/*parameters that will be used by init*/) : ...
int init(); // actually initialize instance and return non 0 upon failure
}