С++ 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, и позволяет установить возвращаемый статус?
В чем смысл введения этой функции?