С++ 11 представляет новый способ завершения выполнения программы - 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
может вызывать зарегистрированную функцию из другого чем тот, который его зарегистрировал, поэтому зарегистрированные функции должны не полагаться на тождество объектов с продолжительностью хранения потоков. - end note] После вызова зарегистрированных функций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
, и позволяет установить возвращаемый статус?
В чем смысл введения этой функции?