Namespaces
Variants

std::set_new_handler

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte de lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de características de biblioteca (C++20)
Utilidades del programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación de tres vías
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilidades generales
Operadores relacionales (deprecated en C++20)
 
Biblioteca de gestión de memoria
Asignadores
Recursos de memoria
Almacenamiento no inicializado (hasta C++20*)
Soporte de recolector de basura (hasta 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 la nueva función global new-handler y devuelve la función new-handler previamente instalada.

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

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

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

Si 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 finalizar 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 devuelve 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 sincroniza-con (ver std::memory_order) las llamadas subsiguientes a std::set_new_handler y std::get_new_handler.

(desde C++11)

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)