std::abort
завершит работу вашего приложения без вызова каких-либо функций, зарегистрированных с использованием «at_exit / at_quick_exit». С другой стороны, std::quick_exit
будет, как вы указывали, вызывать функции, зарегистрированные с использованием std::at_quick_exit
.
std::abort
обычно прерывает ваше приложение, это следует вызывать, когда возникает какая-то ненормальная ситуация и ваше приложение должно быть закрыто без каких-либо очисток. Из std::abort
документации:
Вызывает ненормальное завершение программы, если SIGABRT не перехватывается
обработчик сигнала передается сигналу, а обработчик не возвращается.
Если вы хотите выполнить некоторые очистки, std::quick_exit
будет более подходящим. Эта последняя функция также позволяет вам корректно остановить приложение, так как в конечном итоге он вызывает std::_Exit
вместо того, чтобы сигнализировать как std::abort
(который сигнализирует SIGABRT, что приводит к ненормальной остановке приложения).
std::exit
позволяет корректно завершить работу приложения, по-прежнему очищая автоматические, потоковые локальные и статические переменные. std::quick_exit
нет. Вот почему в его названии есть «quick_», оно быстрее, так как пропускает этап очистки.
Следовательно, между обеими функциями существует фактическая семантическая разница. Один ненормально останавливает приложение, а другой выполняет корректный выход, что позволяет выполнить некоторые очистки.