std::quick_exit
。引用N3242 18.5(第461页)的话:
效果:调用
[[noreturn]] void quick_exit(int status) noexcept;
at_quick_exit
注册的函数按照它们注册的相反顺序被调用,但是一个函数将在任何已经被调用的先前注册函数之后被调用。作为调用quick_exit
的结果,对象不应被销毁。如果通过quick_exit
调用的已注册函数因未为抛出的异常提供处理程序而导致控制离开,则应调用terminate()
。注意:at_quick_exit
可能会从不同于注册它的线程调用已注册的函数,因此已注册的函数不应依赖于具有线程存储期的对象的身份。调用注册函数后,quick_exit
将调用_Exit(status)
。注意:标准文件缓冲区未被刷新。请参见:ISO C 7.20.4.4。
如std::abort(void)
和std::_Exit(int status)
的定义仅在能否将状态传递给父进程方面有所不同,这引发了我的问题。
这是否意味着std::quick_exit
和std::abort
之间语义上唯一的区别是std::quick_exit
调用使用std::at_quick_exit
注册的函数并允许设置返回状态?
引入此函数的原因是什么?
abort
信号会触发SIGABRT
,因此调用abort
通常会在*nix系统上导致核心转储(core dump),在Windows系统上会弹出一个窗口(例如“程序已停止工作,关闭/调试”)。仅在出现意外状况并且您想要生成核心转储/迷你转储来诊断原因时才使用abort
。 - vladr