요약
예전에는 new연산을 통해 메모리를 할당하면서 메모리 할당을 못하게 되었을 때, NULL을 반환했지만, 지금은 사용자가 처리자(new-handler)를 통해 예외처리를 할 수 있다.
프로그램 구현에 좋은 방향으로 new를 사용하는 방법
new 처리자 사용방법 예시코드
void outOfMem(); // Widget 객체에 대한 메모리 할당 실패했을 때 호출되는 함수 선언.
Widget::set_new_handler(outOfMem); // Widget의 new 처리자 함수로서 outOfMem을 설치.
Widget * pw1 = new Widget; // 메모리 할당이 실패하면 outOfMem이 실행
Widget::set_new_handler(0); // null값으로 초기화(new처리자가 아무것도 할 수 없음)
Widget * pw2 = new Widget; // 메모리 할당이 실패하면 이제는 예외를 던진다.
new처리자를 사용하는 클래스를 template으로 바꾸면 좀 더 많은 타입을 수용할 수 있다.
new_handler를 구현하여 new에 대한 예외처리를 했다면, '예외불가(nothrow)' 라는 형태도 있다.
예외불가 형태 예시코드
class Widget { . . . };
Widget *pw1 = new Widget;
if(pw1 == 0) . . .
Widget *pw2 = new (std::nothrow)Widget; // Widget을 할당하다 실패하면 0을 반환.
if(pw2 == 0) . . .
잊지말자!