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

프로그래밍/C++ 2019.11.01 댓글 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 예외를 사용하지 않고, 널 포인터를 리턴합니다.

댓글