std::set_new_handler
| 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:
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 |
(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) |
|
|
(C++11)
|
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) |