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

How to end C++ code directly from a constructor?

我希望我的 C++ 代码在满足特定条件时停止 运行 正确的对象清理;在 class.

的构造函数中
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 does not perform any sort of stack unwinding, and no alive object on the stack will call its respective destructor to perform cleanup. So std::exit 不是一个好主意。

当构造函数失败时,您应该抛出异常,如下所示:

B() {
  if(somethingBadHappened)
  {
    throw myException();
  }
}

确保在main() 和所有线程入口函数中捕获异常。

Throwing exceptions from constructors. Read about Stack unwinding in How can I handle a destructor that fails 阅读更多内容。

无法仅从构造函数执行。如果您抛出异常,那么应用程序需要在入口点设置适当的异常处理代码,因为如果您只是抛出一个不会被处理的异常,那么允许编译器跳过堆栈展开和清理。

如果您不想使用异常,您可以在 class B 中使用一个初始化方法,return 是一个 return 代码:

class B {
public:
    B(/*parameters that will be used by init*/) : ...
    int init(); // actually initialize instance and return non 0 upon failure
}