std::atexit
| Défini dans l'en-tête <cstdlib>
|
||
int atexit( /*c-atexit-handler*/* func );
int atexit( /*atexit-handler*/* func );
|
(1) | (jusqu'à C++11) |
int atexit( /*c-atexit-handler*/* func ) noexcept;
int atexit( /*atexit-handler*/* func ) noexcept;
|
(depuis C++11) | |
extern "C" using /*c-atexit-handler*/ = void();
extern "C++" using /*atexit-handler*/ = void();
|
(2) | (exposition uniquement*) |
Enregistre la fonction pointée par func pour qu'elle soit appelée lors de la terminaison normale du programme (via std::exit() ou le retour de la fonction main)
|
Les fonctions seront appelées lors de la destruction des objets statiques, dans l'ordre inverse : si A a été enregistré avant B, alors l'appel à B est effectué avant l'appel à A. La même chose s'applique au séquencement entre les constructeurs d'objets statiques et les appels à |
(jusqu'à C++11) |
|
Les fonctions peuvent être appelées concurrentiellement avec la destruction des objets à durée de stockage statique et entre elles, en maintenant la garantie que si l'enregistrement de A est séquencé-avant l'enregistrement de B, alors l'appel à B est séquencé-avant l'appel à A ; la même chose s'applique au séquencement entre les constructeurs d'objets statiques et les appels à |
(depuis C++11) |
La même fonction peut être enregistrée plus d'une fois.
Si une fonction se termine par une exception, std::terminate est appelé.
atexit est thread-safe : appeler la fonction depuis plusieurs threads n'induit pas de course aux données.
L'implémentation est garantie de supporter l'enregistrement d'au moins 32 fonctions. La limite exacte est définie par l'implémentation.
Paramètres
| func | - | pointeur vers une fonction à appeler lors de la fin normale du programme |
Valeur de retour
0 si l'enregistrement réussit, valeur non nulle sinon.
Notes
Les deux surcharges sont distinctes car les types du paramètre func sont distincts (la liaison de langage fait partie de son type).
Exemple
#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; }
Sortie :
Returning from main... At exit #2 At exit #1
Voir aussi
|
provoque la fin anormale du programme (sans nettoyage)
(fonction) |
|
|
provoque la fin normale du programme avec nettoyage
(fonction) |
|
|
(C++11)
|
provoque la fin rapide du programme sans nettoyage complet
(fonction) |
|
(C++11)
|
enregistre une fonction à appeler lors de l'invocation de
std::quick_exit
(fonction) |
|
Documentation C
pour
atexit
|
|