Namespaces
Variants

std:: atexit

From cppreference.net
Utilities library
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 atexit : ver std::exit .

(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 atexit : ver std::exit .

(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)
registra una función para ser llamada en la invocación de std::quick_exit
(función)