std:: atexit
|
Definido en el encabezado
<cstdlib>
|
||
| (1) | ||
|
int
atexit
(
/* c-atexit-handler */
*
func
)
;
int atexit ( /* atexit-handler */ * func ) ; |
(hasta C++11) | |
|
int
atexit
(
/* c-atexit-handler */
*
func
)
noexcept
;
int atexit ( /* atexit-handler */ * func ) noexcept ; |
(desde C++11) | |
|
extern
"C"
using
/* c-atexit-handler */
=
void
(
)
;
extern "C++" using /* atexit-handler */ = void ( ) ; |
(2) | ( solo para exposición* ) |
Registra la función apuntada por func para ser llamada en la terminación normal del programa (a través de std::exit() o retornando desde la función main )
|
Las funciones serán llamadas durante la destrucción de los objetos estáticos, en orden inverso: si A fue registrado antes que B, entonces la llamada a B se realiza antes que la llamada a A. Lo mismo aplica al orden entre los constructores de objetos estáticos y las llamadas a
|
(until C++11) |
|
Las funciones pueden ser llamadas concurrentemente con la destrucción de los objetos con duración de almacenamiento estático y entre sí, manteniendo la garantía de que si el registro de A estaba secuenciado antes del registro de B, entonces la llamada a B está secuenciada antes que la llamada a A, lo mismo aplica a la secuenciación entre constructores de objetos estáticos y llamadas a
|
(since C++11) |
La misma función puede registrarse más de una vez.
Si una función termina mediante una excepción, std::terminate es llamado.
atexit
es seguro para hilos: llamar a la función desde varios hilos no induce una condición de carrera.
La implementación garantiza soportar el registro de al menos 32 funciones. El límite exacto está definido por la implementación.
Contenidos |
Parámetros
| func | - | puntero a una función que será llamada en la terminación normal del programa |
Valor de retorno
0 si el registro tiene éxito, valor distinto de cero en caso contrario.
Notas
Las dos sobrecargas son distintas porque los tipos del parámetro func son distintos (el language linkage es parte de su tipo).
Ejemplo
#include <cstdlib> #include <iostream> void atexit_handler_1() { std::cout << "At exit #1\n"; } void atexit_handler_2() { std::cout << "At exit #2\n"; } int main() { const int result_1 = std::atexit(atexit_handler_1); const int result_2 = std::atexit(atexit_handler_2); if (result_1 || result_2) { std::cerr << "Registration failed!\n"; return EXIT_FAILURE; } std::cout << "Returning from main...\n"; return EXIT_SUCCESS; }
Salida:
Returning from main... At exit #2 At exit #1
Véase también
|
provoca la terminación anormal del programa (sin limpieza)
(función) |
|
|
provoca la terminación normal del programa con limpieza
(función) |
|
|
(C++11)
|
provoca la terminación rápida del programa sin limpieza completa
(función) |
|
(C++11)
|
registra una función para ser llamada en la invocación de
std::quick_exit
(función) |
|
Documentación de C
para
atexit
|
|