Espacios de nombres
Variantes
Acciones

std::set_new_handler

De cppreference.com
< cpp‎ | memory‎ | new
 
 
Biblioteca de servicios
 
Gestión de memoria dinámica
Punteros inteligentes
(C++11)
(C++11)
(C++11)
(hasta C++17)
(C++11)
(C++23)
Asignadores de memoria
Recursos de memoria
Almacenamiento no inicializado
Algoritmos de memoria no inicializada
Algoritmos restringidos de memoria no inicializada
Apoyo para recolección de basura
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
Misceláneos
(C++20)
(C++11)
(C++11)
 
 
Definido en el archivo de 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 a new_p la nueva función global del controlador de new y devuelve el controlador de new instalado previamente.

La función del controlador de new es la función que se llama por las funciones de asignación en cualquier ocasión en la que falla un intento de asignar memoria. Su propósito es uno de las tres siguientes:

1) hacer más memoria disponible;
2) terminar el programa (por ejemplo, al llamar a std::terminate);
3) lanzar 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 controlador de new, que puede ofrecer un comportamiento distinto del predeterminado.

Se el controlador de new regresa, la función de asignación repite el intento de asignación previamente fallido y llama al controlador de new nuevamente si la asignación vuelve a fallar. Para terminal el ciclo, el controlador de new puede llamar a std::set_new_handler(nullptr): si, después de un intento de asignación fallido, la función de asignación se da cuenta que std::get_new_handler devuelve un valor de puntero nulo, lanzará std::bad_alloc.

Al inicio del programa, el controlador de new es un puntero nulo.

Esta función es segura contra hilos. Cada llamada a std::set_new_handler se sincroniza-con (véase std::memory_order) las llamadas subsecuentes a std::set_new_handler y std::get_new_handler.

(desde C++11)

Contenido

[editar]Parámetros

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

[editar]Valor de retorno

El controlador de new previamente instalado, o un valor de puntero nulo si no se ha instalado ninguno.

[editar]Ejemplo

#include <iostream>#include <new>   void handler(){std::cout<<"Falla al asignar memoria, terminando\n"; std::set_new_handler(nullptr);}   int main(){ std::set_new_handler(handler);try{while(true){ new int[100000000ul];}}catch(conststd::bad_alloc& e){std::cout<< e.what()<<'\n';}}

Salida:

Falla al asignar memoria, terminando std::bad_alloc

[editar]Véase también

Funciones de asignación.
(función)[editar]
Obtiene el nuevo controlador actual.
(función)[editar]
Tipo de puntero a función del nuevo controlador.
(typedef)[editar]
Excepción que se produce cuando la asignación de memoria falla.
(clase)[editar]
close