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

标签 c++ c++11 c++14 exit exit-code

如果满足特定条件,我希望我的 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() 和所有线程入口函数中捕获异常。

阅读更多 Throwing exceptions from constructors .在 How can I handle a destructor that fails 中阅读有关堆栈展开的信息.

关于c++ - 如何直接从构造函数结束 C++ 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46515100/

相关文章:

c++ - Makefile,循环依赖被删除,需要澄清

c++ - 错误 C2039: 'Open':不是“std::basic_fstream”的成员

c++ - 如何使用模板创建带有斐波那契数的编译时模板化集/数组/vector ?

c++ - 如何使用 C++ 模板实现从类型到对象方法调用的映射?

c++ - 使用特定于 2012 年 11 月 CTP 的 C++11 功能时,有没有办法抑制 Intellisense 错误?

c++ - 如何有条件地将函数添加到类模板?

c++ - 使用 chrono 存储毫秒的可移植方式

c++ - 混合使用 C 和 C++ 时使用 nullptr 而不是 NULL

c++ - 命名空间使用导致多重定义

c++11 - unique_ptr<Derived> 到 unique_ptr<Base> 是否自动向上转换?