new_set_new_handler

new_set_new_handler (std::set_new_handler)

<new> 헤더에 정의되어 있어요. new_p를 새 전역 new-handler 함수로 설정하고, 이전에 설치된 new-handler를 돌려줘요.

출처: cppreference

본문

std::new_handler set_new_handler( std::new_handler new_p ) throw();    // until C++11
std::new_handler set_new_handler( std::new_handler new_p ) noexcept;   // since C++11

new_p를 새 전역 new-handler 함수로 만들고 이전에 설치된 new-handler를 돌려줘요.

new-handler 함수는 메모리 할당 시도가 실패할 때마다 할당 함수들이 호출하는 함수예요. 그 의도된 용도는 다음 중 하나예요.

    1. 더 많은 메모리를 사용 가능하게 만들기,
    1. 프로그램을 종료하기(예: std::terminate),
    1. 예외를 던지기(std::bad_alloc 등).

매개변수

  • new_p: 새 new-handler 함수. 널 포인터일 수 있으며, 이 경우 기본 동작으로 메모리 부족을 보고하고 예외를 던져요.

반환값

이전에 설치된 new-handler. 널 포인터일 수 있어요.

이 함수는 스레드 안전해요. set_new_handler 호출은 이후의 get_new_handler 호출과 동기화돼요.

void my_handler() { std::cerr << "메모리 부족!\n"; std::abort(); }

int main()
{
    std::set_new_handler(my_handler);   // new-handler 등록
    // ...
}

더 알아보기 (Learn more)

cppreference