원본 : http://www.debuglab.com/knowledge/notenoughmemory.html
7. 메모리가 모자랄 경우에 대비한다.
내용은 이렇습니다.
‘Operator new 가 요구된 메모리를 할당할 수 없을 때는 예외를 발생시키는데 이것을 처리하자’
이런 황당한 상황이 자주 있지는 않겠지만 이책에서는 몇 가지 방법을 제시하였습니다.
1) 매크로를 이용하는 방법
#define NEW(PTR,TYPE) \
try{(PTR)=new TYPE;} \
catch(std::bad_alloc){assert(0);}
위의 std::bad_alloc은 operator new 가 메모리 할당 요구를 만족시킬수 없을 때 던지는 예외 타입입니다. assert(0)은 전달된 표현식이 0이 아니면 에러 메시지를 출려하고 abort를 호출합니다.
->그러나 위의 매크로는 new가 이용될수 있는 여러가지 방법들을 고려하지 않았습니다. 배열을 생성한다 던지 인자가 있는 생성자를 부른 다던지 하는 방법들 말입니다.
2) new handler를 이용하는 방법
메모리가 모자라는 경우를 처리하는 함수를 지정하기위해 set_new_handler를 호출합니다.
set_new_handler는 헤더에서 다음과 같이 지정됩니다.
typedef void(*new_handler)();
new_handler set_new_handler(new_handler p) throw();
// 사용예는 다음과 같습니다.
void noMoreMemory(){
cerr<<”요청된 메모리를 확보하지 못함\n”;
abort();
}
int main(){
set_new_handler(noMoreMemory);
int* pBigdataArray=new int[1000000000];
}
뒤에 주절이 주절이 설명이 아주 많습니다.
-참고
Scott Meyers,EffectiveC++
- 2001.08.13 Smile Seo -
"C++" 카테고리의 다른 글
- exception 클래스 확장하기 (0)2007/03/21
- operator new 와 operator delete 작성시 관례를... (0)2007/03/19
- 메모리가 모자랄 경우에 대비한다 (0)2007/03/19
- malloc과 free 보다는 new와 delete를 사용한다. (0)2007/03/19
- based addressing (0)2007/03/17

수안이의 컴퓨터 연구실



Leave your greetings.