CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): dkkang (운디드니)
날 짜 (Date): 2002년 12월 27일 금요일 오전 11시 38분 26초
제 목(Title): class specified new_handler 문제...


아래와 같은 프로그램을 짰는데 컴파일해서 실행해보면 outOfMemory 라는 X클래스에 specified 된 new_handler가 동작하지 않음을 볼 수 있습니다. (vcc, gcc에서 테스트) 왜 그럴까요? 언뜻 보기에 소스에는 그다지 문제가 있어 보이질 않습니다.

아시는 분은 가르쳐주세요~ ^^ 그럼 캄싸해여~


#include <iostream>
#include <new>

using namespace std;

// Effective c++ : Item 7
// set_new_handler example

typedef void (*PEHF)();

void outOfMemory() {
  cerr << "out of memory!" << endl;
  abort(); 
}

class X {
public:
  static PEHF currentPEHF;
  static PEHF set_new_handler(PEHF p);
  void* operator new(size_t size);
};

PEHF X::currentPEHF;

PEHF X::set_new_handler(PEHF p) {
  PEHF oldPEHF = currentPEHF;
  currentPEHF = p;
  return oldPEHF;
}

void* X::operator new(size_t size)
{
  cerr << "here!" << endl;
  PEHF currentHandler = std::set_new_handler(currentPEHF);
  void* memory = ::new char[size];
  ::set_new_handler(currentHandler);
  return memory;
}

main() {
  cerr << "main 2!" << endl;
  X* px;
  X::set_new_handler(outOfMemory);
  px = new X[1000000000];
  delete px;
}


[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.