Espacios de nombres
Variantes
Acciones

std::atexit

De cppreference.com
< cpp‎ | utility‎ | program
 
 
Biblioteca de servicios
 
Servicios de apoyo de programa
Terminación del programa
(C++11)
(C++11)
Comunicación con el entorno
Señales
Tipos de señales
Saltos no locales
Tipos
 
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 atexit: véase std::exit.

(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 atexit: véase std::exit.

(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) [editar]
Produce la terminación normal del programa con limpieza.
(función) [editar]
Produce la terminación normal del programa sin limpiar completamente.
(función) [editar]
Registra una función a ser llamada cuando se invoque a quick_exit.
(función) [editar]