????ж??new-handler?????????????set_new_handler????а??new-handler??operator new??????治?????????????????std::bad_alloc?????????

?????? ???std::bad_alloc???std::bad_alloc??е??????????????????????????operator new??????????????????????????????????????????????????????Υ??operator new???淶???淶?е???????????abort??????new-handler????????????????????????std::bad_alloc????????????????????淶???μ?????m14????

??????з?????????????????abort??exit??abort/exit????????c????????????б??c++???μ?????49????

????????????????????new-handler???????????????

??????????????????????????????????????????????????


class x {
public:
 static void
 outofmemory();
 
 ...
 
};

class y {
public:
 static void outofmemory();
 
 ...
 
};

x* p1 = new x; // ?????????????x::outofmemory
y* p2 = new y; // ??????????????y::outofmemory
 


????c++????????????????new-handler????????????????????????????????????????????????????汾??set_new_handler??operator new?????set_new_handler??????????new-handler????????set_new_handler??????new-handler??????????operator new??????????????????????new-handler??????new-handler??

???????賬????x??????????????????operator new??????x???????????????????ζ???????ó?????????????????????????????new_handler?????????????????x????????????????


class x {
public:
 static new_handler set_new_handler(new_handler p);
 static void * operator new(size_t size);
 
private:
 static new_handler currenthandler;
};


???????????????????????塣???????t???????????????0?????????x::currenthandler????????????


new_handler x::currenthandler; //??????currenthandler?0(??null)


??????x?е?set_new_handler???????洫???????κ???????????????????????????κ?????????????汾??set_new_handler???????


new_handler x::set_new_handler(new_handler p)
{
 new_handler oldhandler = currenthandler;
 currenthandler = p;
 return oldhandler;