如何直接从构造函数结束C 代码



我希望我的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
}

最新更新