如何直接从构造函数结束 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
}
我希望我的 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
}