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)
Definido en el encabezado <new>
std:: new_handler set_new_handler ( std:: new_handler new_p ) throw ( ) ;
(hasta C++11)
std:: new_handler set_new_handler ( std:: new_handler new_p ) noexcept ;
(desde C++11)

Hace que new_p sea la nueva función global new-handler y devuelve el new-handler previamente instalado.

La función new-handler es la función llamada por las funciones de asignación cuando un intento de asignación de memoria falla. Su propósito previsto es uno de tres cosas:

1) hacer más memoria disponible,
2) terminar el programa (por ejemplo, llamando a std::terminate ),
3) lanza una excepción de tipo std::bad_alloc o derivada de std::bad_alloc .

La implementación por defecto lanza std::bad_alloc . El usuario puede instalar su propio new-handler , que puede ofrecer un comportamiento diferente al predeterminado.

Si el new-handler retorna, la función de asignación repite el intento de asignación previamente fallido y llama al new-handler nuevamente si la asignación falla otra vez. Para terminar el bucle, new-handler puede llamar a std :: set_new_handler ( nullptr ) : si, después de un intento de asignación fallido, la función de asignación encuentra que std::get_new_handler retorna un valor de puntero nulo, lanzará std::bad_alloc .

Al inicio del programa, new-handler es un puntero nulo.

Esta función es segura para hilos. Cada llamada a std::set_new_handler synchronizes-with (ver std::memory_order ) las subsiguientes llamadas a std::set_new_handler y std::get_new_handler .

(desde C++11)

Contenidos

Parámetros

new_p - puntero a función de tipo std::new_handler , o puntero nulo

Valor de retorno

El manejador de nuevo previamente instalado, o un valor de puntero nulo si no se había instalado ninguno.

Ejemplo

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

Salida posible:

Memory allocation failed, terminating
std::bad_alloc

Véase también

funciones de asignación
(función)
obtiene el manejador de memoria actual
(función)
tipo de puntero a función del manejador de memoria
(typedef)
excepción lanzada cuando falla la asignación de memoria
(clase)