Namensräume
Varianten
Aktionen

std::atexit

Von cppreference.com
< cpp‎ | utility‎ | program
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
 
Definiert in Header <cstdlib>
(1)
int atexit( /* c-atexit-handler */* func );
int atexit( /* atexit-handler */* func );
(bis C++11)
int atexit( /* c-atexit-handler */* func ) noexcept;
int atexit( /* atexit-handler */* func ) noexcept;
(seit C++11)
extern "C" using /* c-atexit-handler */ = void();
extern "C++" using /* atexit-handler */ = void();
(2) (nur Exposition*)

Registriert die durch func gezeigte Funktion, damit sie bei normaler Programmbeendigung (durch std::exit() oder Rückkehr aus der main-Funktion) aufgerufen wird.

Die Funktionen werden während der Zerstörung der statischen Objekte in umgekehrter Reihenfolge aufgerufen: Wenn A vor B registriert wurde, dann wird B vor A aufgerufen. Dasselbe gilt für die Reihenfolge zwischen Konstruktoren statischer Objekte und den Aufrufen von atexit: siehe std::exit.

(bis C++11)

Die Funktionen können gleichzeitig mit der Zerstörung der Objekte mit statischer Speicherdauer und untereinander aufgerufen werden, wobei die Garantie aufrechterhalten wird, dass wenn die Registrierung von A vor der Registrierung von B erfolgte, der Aufruf von B vor dem Aufruf von A erfolgt. Dasselbe gilt für die Sequenzierung zwischen Konstruktoren statischer Objekte und Aufrufen von atexit: siehe std::exit.

(seit C++11)

Dieselbe Funktion kann mehrfach registriert werden.

Wenn eine Funktion eine Ausnahme auslöst, wird std::terminate aufgerufen.

atexit ist Thread-sicher: Das Aufrufen der Funktion aus mehreren Threads verursacht keine Datenrace-Bedingung.

Die Implementierung garantiert die Unterstützung der Registrierung von mindestens 32 Funktionen. Die genaue Grenze ist implementierungsabhängig.

Inhalt

[bearbeiten] Parameter

func - Zeiger auf eine Funktion, die bei normaler Programmbeendigung aufgerufen werden soll

[bearbeiten] Rückgabewert

0, wenn die Registrierung erfolgreich ist, ein von Null verschiedener Wert andernfalls.

[bearbeiten] Hinweise

Die beiden Überladungen sind verschieden, da die Typen des Parameters func unterschiedlich sind (Sprachverknüpfung ist Teil seines Typs).

[bearbeiten] Beispiel

#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;
}

Ausgabe

Returning from main...
At exit #2
At exit #1

[bearbeiten] Siehe auch

verursacht abnormalen Programmabbruch (ohne Bereinigung)
(funktion) [bearbeiten]
verursacht normalen Programmabbruch mit Bereinigung
(funktion) [bearbeiten]
verursacht schnellen Programmabbruch ohne vollständige Bereinigung
(funktion) [bearbeiten]
registriert eine Funktion, die bei Aufruf von std::quick_exit aufgerufen wird
(funktion) [bearbeiten]
C-Dokumentation für atexit