风歌的blog

已搬家到 blog.imxjf.top
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

set_new_handler

Posted on 2005-08-17 15:56  风歌  阅读(581)  评论(0编辑  收藏  举报

#include <iostream>
#include <stdlib.h>
#include <new>

using namespace std;
class x
{
 public:
  void f(){cout<<sizeof(*this)<<' '<<sizeof(x);}
 // static void *operator new(size_t size,_PNH p);
  static void *operator new(size_t size,new_handler p);
  static void *operator new(size_t size)
  {
   return ::operator new (size);
  }
};

void *x::operator new(size_t size,new_handler p)
{
 if(0==size)
  size=1;
 set_new_handler(p);
 return ::operator new(size);
}


void specialErrorHandler()
{
 cout<<"error in alloc memory!\n";
 exit(1);
}

int main()
{
 class x *px1=new(specialErrorHandler) x;

// class x *px2=new(x);

// class x px1;
// px1.f();
 px1->f();
 delete px1;
// delete px2;
 return 0;
 
}