std::set_new_handler
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:
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 | (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) | |
(C++11) | Obtiene el nuevo controlador actual. (función) |
Tipo de puntero a función del nuevo controlador. (typedef) | |
Excepción que se produce cuando la asignación de memoria falla. (clase) |