std::at_quick_exit
| Definiert in Header <cstdlib> |
||
| int at_quick_exit( /*atexit-handler*/* func ) noexcept; int at_quick_exit( /*c-atexit-handler*/* func ) noexcept; |
(1) | (seit C++11) |
| extern "C++" using /*atexit-handler*/ = void(); extern "C" using /*c-atexit-handler*/ = void(); |
(2) | (nur Exposition*) |
Registriert die von func zeigende Funktion, um bei schnellem Programmabbruch (über std::quick_exit) aufgerufen zu werden.
Der Aufruf der Funktion von mehreren Threads verursacht keinen Datenwettlauf (data race). Die Implementierung garantiert die Unterstützung der Registrierung von mindestens 32 Funktionen. Die genaue Grenze ist implementierungsabhängig.
Die registrierten Funktionen werden bei normalem Programmabbruch nicht aufgerufen. Wenn eine Funktion in diesem Fall aufgerufen werden muss, muss std::atexit verwendet werden.
Inhalt |
[bearbeiten] Parameter
| func | - | Zeiger auf eine Funktion, die bei schnellem Programmabbruch aufgerufen werden soll |
[bearbeiten] Rückgabewert
0, wenn die Registrierung erfolgreich war, ein von Null verschiedener Wert andernfalls.
[bearbeiten] Hinweise
Die beiden Überladungen sind unterschiedlich, da die Typen des Parameters func unterschiedlich sind (Sprachverknüpfung ist Teil seines Typs).
[bearbeiten] Beispiel
#include <cstdlib> #include <iostream> void f1() { std::cout << "pushed first" << std::endl; // flush is intentional } extern "C" void f2() { std::cout << "pushed second\n"; } int main() { auto f3 = [] { std::cout << "pushed third\n"; }; std::at_quick_exit(f1); std::at_quick_exit(f2); std::at_quick_exit(f3); std::quick_exit(0); }
Ausgabe
pushed third pushed second pushed first
[bearbeiten] Siehe auch
| verursacht abnormalen Programmabbruch (ohne Bereinigung) (funktion) | |
| verursacht normalen Programmabbruch mit Bereinigung (funktion) | |
| registriert eine Funktion, die bei Aufruf von std::exit() aufgerufen wird (funktion) | |
| (C++11) |
verursacht schnellen Programmabbruch ohne vollständige Bereinigung (funktion) |
| C-Dokumentation für at_quick_exit
| |