std:: set_new_handler
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | ||||
|
(C++11)
|
||||
|
set_new_handler
|
||||
| Classes | ||||
|
(C++11)
|
||||
|
(C++17)
|
||||
| Types | ||||
| Objects | ||||
|
(C++20)
|
||||
| Object access | ||||
|
(C++17)
|
|
헤더에 정의됨
<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-handler 함수로 설정하고, 이전에 설치된 new-handler를 반환합니다.
new-handler 함수는 메모리 할당 시도가 실패할 때마다 할당 함수들 에 의해 호출되는 함수입니다. 이것의 의도된 목적은 다음 세 가지 중 하나입니다:
기본 구현은 std::bad_alloc 을 던집니다. 사용자는 기본 동작과 다른 기능을 제공할 수 있는 자신만의 new-handler 를 설치할 수 있습니다.
만약 new-handler 가 반환되면, 할당 함수는 이전에 실패한 할당 시도를 반복하고 할당이 다시 실패할 경우 new-handler 를 다시 호출합니다. 이 루프를 종료하기 위해, new-handler 는 std :: set_new_handler ( nullptr ) 를 호출할 수 있습니다: 만약 할당 실패 후에 할당 함수가 std::get_new_handler 가 null 포인터 값을 반환하는 것을 발견하면, std::bad_alloc 을 던집니다.
프로그램 시작 시, new-handler 는 널 포인터입니다.
|
이 함수는 스레드 안전합니다.
|
(C++11부터) |
목차 |
매개변수
| new_p | - | std::new_handler 타입의 함수에 대한 포인터, 또는 null 포인터 |
반환값
이전에 설치된 new 핸들러, 또는 설치된 것이 없을 경우 null 포인터 값.
예제
#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) |
|
|
메모리 할당 실패 시 발생하는 예외
(클래스) |