std:: set_new_handler
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | ||||
|
(C++11)
|
||||
|
set_new_handler
|
||||
| Classes | ||||
|
(C++11)
|
||||
|
(C++17)
|
||||
| Types | ||||
| Objects | ||||
|
(C++20)
|
||||
| Object access | ||||
|
(C++17)
|
|
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:
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
|
(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) |
|
|
(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) |