📜  std::quick_exit 和 std::abort 的区别(1)

📅  最后修改于: 2023-12-03 15:05:22.265000             🧑  作者: Mango

std::quick_exit 和 std::abort 的区别

在C++11中,标准库新增了两个函数:std::quick_exitstd::abort。这两个函数都用于程序的异常终止,但它们之间有什么区别呢?

std::quick_exit

函数原型为:

[[noreturn]] void quick_exit(int status) noexcept;

该函数会立即退出程序,并调用所有通过std::at_quick_exit注册的函数(如果有的话),这些函数按照它们的注册顺序执行。除此之外,quick_exit的行为与exit相同,程序进程的资源会正常释放,例如已经打开的文件会关闭。另外,可能会发生一些状态清理的操作,例如删除临时文件、从内存中删除共享内存等。需要注意的是:和exit不同,quick_exit不会调用atexit注册的函数。同时,quick_exit可以抛出异常(一旦异常被捕获,该函数就会终止)。

std::abort

函数原型为:

[[noreturn]] void abort() noexcept;

该函数同样会导致程序异常终止,但与quick_exit不同,abort调用期间不会有任何清理操作,已经分配的资源也不会被释放,所有未保存的修改都将丢失。此外,abort不会抛出异常。

总结

quick_exitabort都用于异常终止程序,但它们的处理方式不同。如果需要进行清理操作,而且想要注册一些回调函数在清理完成后执行,那么应该使用quick_exit。如果只需要紧急终止程序,并且不用担心资源管理或者状态清理,那么应该使用abort

需要注意的是,这两个函数都是“不可恢复”的终止方式,使用它们必须谨慎,特别是在生产环境中。