Namespaces
Variants

std:: set_new_handler

From cppreference.net
< cpp ‎ | memory ‎ | new
Utilities library
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
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 :

1) rendre plus de mémoire disponible,
2) terminer le programme (par exemple en appelant std::terminate ),
3) lève une exception de type std::bad_alloc ou dérivée de std::bad_alloc .

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 à std::set_new_handler synchronise-avec (voir std::memory_order ) les appels suivants à std::set_new_handler et std::get_new_handler .

(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)
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)