Namespaces
Variants

std:: set_new_handler

From cppreference.net
< cpp ‎ | memory ‎ | new
Utilities library
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
헤더에 정의됨 <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 함수는 메모리 할당 시도가 실패할 때마다 할당 함수들 에 의해 호출되는 함수입니다. 이것의 의도된 목적은 다음 세 가지 중 하나입니다:

1) 더 많은 메모리를 사용 가능하게 만들기,
2) 프로그램을 종료합니다 (예: std::terminate 호출을 통해),
3) std::bad_alloc 또는 std::bad_alloc 에서 파생된 타입의 예외를 발생시킵니다.

기본 구현은 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 는 널 포인터입니다.

이 함수는 스레드 안전합니다. std::set_new_handler 에 대한 모든 호출은 이후의 std::set_new_handler std::memory_order (참조)와 동기화됩니다 ( std::get_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

참고 항목

할당 함수
(함수)
현재 new 핸들러를 얻음
(함수)
new 핸들러의 함수 포인터 타입
(typedef)
메모리 할당 실패 시 발생하는 예외
(클래스)