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 예외를 사용하지 않고, 널 포인터를 리턴합니다.
댓글