std::atexit
Definido en el archivo de encabezado <cstdlib>
|
||
(1) | ||
int atexit( /*controlador-atexit-de-c*/* func ); int atexit( /*controlador-atexit*/* func ); |
(hasta C++11) | |
int atexit( /*controlador-atexit-de-c*/* func ) noexcept; int atexit( /*controlador-atexit*/* func ) noexcept; |
(desde C++11) | |
extern "C++" using /*controlador-atexit*/ = void(); // solo exposición extern "C" using /*controlador-atexit-de-c*/ = void(); // solo exposición |
(2) | |
Registra la función apuntada por func
para que se llame en la terminación normal del programa (vía std::exit() o al regresar de la función main
).
Las funciones se llamarán durante la destrucción de los objetos estáticos, en orden inverso: si A se registró antes que B, entonces la llamada a B se hace antes de la llamada a A. Lo mismo aplica al orden entre los constructores de objetos estáticos y las llamadas a |
(hasta C++11) |
Las funciones pueden llamarse concurrentemente con la destrucción de los objetos con duración de almacenamiento estática y entre sí, manteniendo la garantía que si el registro de A fue secuenciado-antes que el registro de B, entonces la llamada a B es secuenciada-antes que la llamada a A, lo mismo aplica al secuenciado entre constructores de objetos estáticos y llamadas a |
(desde C++11) |
La misma función puede registrarse más de una vez.
Si una función egresa vía un excepción, se llama a std::terminate.
atexit
es segura contra hilos: llamar a la función desde varios hilos no induce una carrera de datos.
Se garantiza que la implementación soporta el registro de al menos 32
funciones. El límite exacto está definido por la implementación.
Contenido |
[editar] Parámetros
func | - | Puntero a una función a ser llamada en la terminación normal del programa. |
[editar] Valor de retorno
0 si el registro tiene éxito, de otra forma, un valor distinto de cero.
[editar] Notas
Las dos sobrecargas son distintas porque los tipos del parámetro func
son distintos (el enlace de lenguaje es parte de su tipo).
[editar] Ejemplo
#include <iostream> #include <cstdlib> void atexit_handler_1() { std::cout << "a la salida #1\n"; } void atexit_handler_2() { std::cout << "a la salida #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 != 0) or (result_2 != 0)) { std::cerr << "Falla en el registro\n"; return EXIT_FAILURE; } std::cout << "regresando de main\n"; return EXIT_SUCCESS; }
Salida:
regresando de main a la salida #2 a la salida #1
[editar] Véase también
Produce la terminación anormal del programa (sin limpiar). (función) | |
Produce la terminación normal del programa con limpieza. (función) | |
(C++11) |
Produce la terminación normal del programa sin limpiar completamente. (función) |
(C++11) |
Registra una función a ser llamada cuando se invoque a quick_exit. (función) |
Documentación de C para atexit
|