std::set_new_handler
| Определено в заголовочном файле <new>
|
||
std::new_handler set_new_handler( std::new_handler new_p ) throw(); |
(до C++11) | |
std::new_handler set_new_handler( std::new_handler new_p ) noexcept; |
(начиная с C++11) | |
Делает new_p новой глобальной функцией обработчика new и возвращает ранее установленный обработчик new.
Функция обработчик new это функция, вызываемая функциями распределения памяти всякий раз, когда попытка выделения памяти терпит неудачу. Его предполагаемая цель одна из трёх:
Реализация по умолчанию генерирует std::bad_alloc. Пользователь может установить свой собственный обработчик new, который может предложить поведение, отличное от поведения по умолчанию.
Если обработчик new возвращает значение, функция выделения повторяет предыдущую неудачную попытку выделения и снова вызывает обработчик new, если выделение снова не удаётся. Чтобы завершить цикл, обработчик new может вызвать std::set_new_handler(nullptr): если после неудачной попытки выделения функция выделения обнаруживает, что std::get_new_handler возвращает значение нулевого указателя, она сгенерирует std::bad_alloc.
При запуске программы обработчик new является нулевым указателем.
|
Эта функция является потокобезопасной. Каждый вызов |
(начиная с C++11) |
Параметры
| new_p | — | указатель на функцию типа std::new_handler или нулевой указатель
|
Возвращаемое значение
Ранее установленный обработчик new или нулевое значение указателя, если он не был установлен.
Пример
#include <iostream>
#include <new>
void handler()
{
std::cout << "Не удалось выделить память, завершение\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';
}
}
Возможный вывод:
Не удалось выделить память, завершение
std::bad_alloc
Смотрите также
| функции распределения памяти (функция) | |
(C++11) |
получает текущий обработчик new (функция) |
| тип указателя на функцию обработчика new (определение типа) | |
| исключение генерируемое при сбое выделения памяти (класс) |