std:: set_new_handler
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | ||||
|
(C++11)
|
||||
|
set_new_handler
|
||||
| Classes | ||||
|
(C++11)
|
||||
|
(C++17)
|
||||
| Types | ||||
| Objects | ||||
|
(C++20)
|
||||
| Object access | ||||
|
(C++17)
|
|
Défini dans l'en-tête
<new>
|
||
|
std::
new_handler
set_new_handler
(
std::
new_handler
new_p
)
throw
(
)
;
|
(jusqu'à C++11) | |
|
std::
new_handler
set_new_handler
(
std::
new_handler
new_p
)
noexcept
;
|
(depuis C++11) | |
Rend new_p la nouvelle fonction globale de gestion de new et retourne le gestionnaire de new précédemment installé.
La fonction new-handler est la fonction appelée par les fonctions d'allocation lorsqu'une tentative d'allocation de mémoire échoue. Son objectif prévu est l'une des trois choses suivantes :
L'implémentation par défaut lance std::bad_alloc . L'utilisateur peut installer son propre new-handler , qui peut offrir un comportement différent de celui par défaut.
Si le new-handler retourne, la fonction d'allocation répète la tentative d'allocation précédemment échouée et rappelle le new-handler si l'allocation échoue à nouveau. Pour mettre fin à la boucle, new-handler peut appeler std :: set_new_handler ( nullptr ) : si, après une tentative d'allocation échouée, la fonction d'allocation constate que std::get_new_handler retourne un pointeur nul, elle lancera std::bad_alloc .
Au démarrage du programme, new-handler est un pointeur nul.
|
Cette fonction est sûre dans un contexte multithread. Chaque appel à
|
(depuis C++11) |
Table des matières |
Paramètres
| new_p | - | pointeur vers une fonction de type std::new_handler , ou pointeur nul |
Valeur de retour
Le gestionnaire de nouvelle installation précédent, ou une valeur de pointeur nul si aucun n'était installé.
Exemple
#include <iostream> #include <new> void handler() { std::cout << "Memory allocation failed, terminating\n"; std::set_new_handler(nullptr); } int main() { std::set_new_handler(handler); try { while (true) { new int[1000'000'000ul](); } } catch (const std::bad_alloc& e) { std::cout << e.what() << '\n'; } }
Sortie possible :
Memory allocation failed, terminating std::bad_alloc
Voir aussi
|
fonctions d'allocation
(fonction) |
|
|
(C++11)
|
obtient le gestionnaire new actuel
(fonction) |
|
type de pointeur de fonction du gestionnaire new
(typedef) |
|
|
exception levée lorsque l'allocation de mémoire échoue
(classe) |