std::atexit
| Definido en el encabezado <cstdlib>
|
||
int atexit( /*c-atexit-handler*/* func );
int atexit( /*atexit-handler*/* func );
|
(1) | (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 exposición*) |
Registra la función apuntada por func para que sea llamada en la terminación normal del programa (mediante std::exit() o al retornar de 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 para el orden entre los constructores de objetos estáticos y las llamadas a |
(hasta 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 fue secuenciado-antes del registro de B, entonces la llamada a B es secuenciada-antes de la llamada a A; lo mismo aplica para la secuenciación entre constructores de objetos estáticos y llamadas a |
(desde C++11) |
La misma función puede ser registrada más de una vez.
Si una función termina mediante una excepción, se llama a std::terminate.
atexit es segura para hilos: llamar a la función desde varios hilos no induce una condición de carrera.
Se garantiza que la implementación soporta el registro de al menos 32 funciones. El límite exacto está definido por la implementación.
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
|
|