본문 바로가기

Software/C/C++

[C++] new 연산자에 의해 전달되는 예외

new 연산자에서 메모리 할당에 실패했을 경우, NULL포인터가 return된다.
이는 C++의 과거 표준이다. 현재 새로운 표준에 대한 정보는 header파일에 bad_alloc예외가 전달된다고 한다.

MS VC++ 컴파일러는 MSDN에서 아래와 같이 지원한다고 명시되어 있다.

http://msdn2.microsoft.com/ko-kr/library/6512dwes(en-us,VS.80).aspx



The class describes an exception thrown to indicate that an allocation request did not succeed.

class bad_alloc : public exception { 
   bad_alloc(const char *_Message): exception(_Message) {} 
   bad_alloc(): exception("bad allocation", 1) {} 
   virtual ~bad_alloc() {}
};

An instance of bad_alloc can be constructed from a message or from a message string with no memory allocation.

The value returned by what is an implementation-defined C string. None of the member functions throw any exceptions.

Header: <new>

// bad_alloc.cpp
// compile with: /EHsc
#include<new>
#include<iostream>
using namespace std;

int main() {
   char* ptr;
   try {
      ptr = new char[(~unsigned int((int)0)/2) - 1];
      delete[] ptr;
   }
   catch( bad_alloc &ba) {
      cout << ba.what( ) << endl;
   }
}
bad allocation

Header: <new>