플로렌스라는 개발자

C++ new 연산자 사용시 예외 처리

프로그래밍/C++ 2019.11.01 댓글 0 Plorence

목차

    C++에서 new 연산자를 사용할 때 일어나는 메모리 할당 문제를 해결하는 두 가지 방법을 제공합니다.

    • 메모리 할당 문제가 발생할경우 널 포인터를 리턴

    • new가 bad_alloc 예외를 발생시킴

    bad_alloc 예외 방식

    #include <iostream>
    #include <new>
    struct  Temp {
           double a[90000];
           long b[90000];
    };
    int main(void) {
           Temp * temp;
           try {
                  temp = new Temp();
           }
           catch (std::bad_alloc & ba) {
                  std::cout << ba.what();
           }
    }

    bad_alloc 클래스는 new 헤더 파일에 포함되어 있습니다.

    동적 할당을 실패한다면, bad_alloc 예외가 발생할 것입니다.

     

    널 포인터 방식

    대부분 소스 코드는 new가 할당에 실패하면 널 포인터를 리턴하도록 작성되어 있습니다.

    현재의 표준은 null을 리턴하는 과거의 new를 대체하는 형태를 제공하고 있습니다.

    #include <iostream>
    struct test {
           double a[90000];
    };
    int main(void) {
           test * a = new (std::nothrow) test;
           if (a == nullptr) {
                  std::cout << "할당 실패";
           }
           
    }

    std::nothrow를 사용하여 할당 실패 시 bad_alloc 예외를 사용하지 않고, 널 포인터를 리턴합니다.

    댓글

    0