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::terminate),Реализация по умолчанию выбрасывает 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 << "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';
}
}
Возможный вывод:
Memory allocation failed, terminating std::bad_alloc
См. также
| функции выделения памяти (функция) |
|
|
(C++11) | получает текущий обработчик new (функция) |
| тип указателя на функцию-обработчик new (определение типа) |
|
| исключение, выбрасываемое при неудачном выделении памяти (класс) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/new/set_new_handler