C++ 11 presenta una nueva forma de finalizar la ejecución del programa: std::quick_exit
.¿Cuál es la diferencia entre std :: quick_exit y std :: abort y por qué se necesitó std :: quick_exit?
Citando al N3242 18,5 (p 461).:
[[noreturn]] void quick_exit(int status) noexcept;
Efectos: Funciones registradas por las llamadas a
at_quick_exit
se llaman en el orden inverso al de su inscripción, salvo que una función será llamada después de que cualquier función previamente registrada que tenía ya se haya llamado en el momento en que se registró. Los objetos no deben destruirse como resultado de llamar alquick_exit
. Si el control deja una función registrada llamada porquick_exit
porque la función no proporciona un controlador para una excepción lanzada, se llamará alterminate()
. [Nota:at_quick_exit
puede llamar a una función registrada de un hilo diferente que el que lo registró, por lo que las funciones registradas deben no depender de la identidad de los objetos con duración de almacenamiento de hilo. - nota final] Después de llamar a las funciones registradas,quick_exit
deberá llamar al_Exit(status)
. [Nota: los búferes de archivos estándar no se lavan. Ver: ISO C 7.20.4.4. - nota final]
Como la definición de std::abort(void)
y std::_Exit(int status)
sólo se diferencian en la capacidad de pasar a la situación del proceso principal, se plantea la pregunta.
¿Quiere decir que la única diferencia en la semántica entre std::quick_exit
y std::abort
son llamadas funciones que std::quick_exit
registraron usando std::at_quick_exit
y permite establecer el estado devuelto?
¿Cuál fue el motivo por el que se introdujo esta función?
Además, dado que 'abort 'señala' SIGABRT', típicamente se generará una llamada 'abortada' (aunque esto es configurable) en * * core dump ** on * nix, o en una ventana emergente en Windows (p. ej. _Program ha dejado de funcionar, Close/Debug_). Solo use 'abort' cuando termine debido a una ** condición inesperada ** y quiera un coredump/minidump ** diagnosticar el motivo ** de la condición inesperada. – vladr