📅  最后修改于: 2023-12-03 15:05:22.265000             🧑  作者: Mango
在C++11中,标准库新增了两个函数:std::quick_exit
和std::abort
。这两个函数都用于程序的异常终止,但它们之间有什么区别呢?
函数原型为:
[[noreturn]] void quick_exit(int status) noexcept;
该函数会立即退出程序,并调用所有通过std::at_quick_exit
注册的函数(如果有的话),这些函数按照它们的注册顺序执行。除此之外,quick_exit
的行为与exit
相同,程序进程的资源会正常释放,例如已经打开的文件会关闭。另外,可能会发生一些状态清理的操作,例如删除临时文件、从内存中删除共享内存等。需要注意的是:和exit
不同,quick_exit
不会调用atexit
注册的函数。同时,quick_exit
可以抛出异常(一旦异常被捕获,该函数就会终止)。
函数原型为:
[[noreturn]] void abort() noexcept;
该函数同样会导致程序异常终止,但与quick_exit
不同,abort
调用期间不会有任何清理操作,已经分配的资源也不会被释放,所有未保存的修改都将丢失。此外,abort
不会抛出异常。
quick_exit
和abort
都用于异常终止程序,但它们的处理方式不同。如果需要进行清理操作,而且想要注册一些回调函数在清理完成后执行,那么应该使用quick_exit
。如果只需要紧急终止程序,并且不用担心资源管理或者状态清理,那么应该使用abort
。
需要注意的是,这两个函数都是“不可恢复”的终止方式,使用它们必须谨慎,特别是在生产环境中。