在 C++98 中,如何在不展开的情况下退出进程?
How to exit a process without any unwinding in C++98?
在 C++11 或更高版本中,我们可以调用 std::quick_exit
退出进程而不进行任何展开,即不会调用析构函数 [after |在] std::quick_exit
.
我有一个项目:
- 它有一个全局对象,在全局对象的析构函数中有一个致命的错误;
- 我无法访问全局对象的源;
- 如果我可以在
main
函数的最后一行调用 std::quick_exit
,则不会触发错误;
- 由于某些原因,该项目必须使用C++98编译器进行编译;也就是说,我不能在 C++98 编译器中调用
std::quick_exit
。
简而言之:
C++98 中的哪个函数等同于 C++11 的 std::quick_exit
?
在Windows下,我可以调用ExitProcess(0)
强制退出进程而不进行任何清理。
Linux下对应的是什么?
您可以使用 <cstdlib>
中的 abort()
。它向进程发送 SIGABRT
,如果未捕获到信号,程序将终止,而不调用任何破坏例程,如 atexit()
或任何析构函数。
更多信息在这里:link
编辑:std::quick_exit
正常退出,而调用abort()
导致异常终止,不知道是不是问题。
在 C++11 或更高版本中,我们可以调用 std::quick_exit
退出进程而不进行任何展开,即不会调用析构函数 [after |在] std::quick_exit
.
我有一个项目:
- 它有一个全局对象,在全局对象的析构函数中有一个致命的错误;
- 我无法访问全局对象的源;
- 如果我可以在
main
函数的最后一行调用std::quick_exit
,则不会触发错误; - 由于某些原因,该项目必须使用C++98编译器进行编译;也就是说,我不能在 C++98 编译器中调用
std::quick_exit
。
简而言之:
C++98 中的哪个函数等同于 C++11 的 std::quick_exit
?
在Windows下,我可以调用ExitProcess(0)
强制退出进程而不进行任何清理。
Linux下对应的是什么?
您可以使用 <cstdlib>
中的 abort()
。它向进程发送 SIGABRT
,如果未捕获到信号,程序将终止,而不调用任何破坏例程,如 atexit()
或任何析构函数。
更多信息在这里:link
编辑:std::quick_exit
正常退出,而调用abort()
导致异常终止,不知道是不是问题。