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-handler - это функция, вызываемая функциями выделения памяти при каждой неудачной попытке выделения памяти. Её предназначение - одно из трех:
Реализация по умолчанию выбрасывает std::bad_alloc. Пользователь может установить свой собственный new-handler, который может предлагать поведение, отличное от поведения по умолчанию.
Если new-handler возвращается, функция выделения памяти повторяет ранее неудавшуюся попытку выделения и вызывает new-handler снова, если выделение снова не удается. Чтобы завершить цикл, new-handler может вызвать std::set_new_handler(nullptr): если после неудавшейся попытки выделения функция выделения обнаруживает, что std::get_new_handler возвращает нулевой указатель, она выбрасывает std::bad_alloc.
При запуске программы new-handler является нулевым указателем.
|
Эта функция является потокобезопасной. Каждый вызов |
(начиная с 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
(typedef) |
|
|
исключение, выбрасываемое при неудачном выделении памяти
(класс) |