std::set_new_handler 用于如果 new 失败就调用此函数;int * gmem = 0;void outofmem(){ std::cerr << “mem alloc failed” << endl; Sleep(500); //稍微睡一下,不然停止调式按钮都没反映啦}int main(int argc, char *argv[]){ enum { Chunk = 1024 * 1024 * 8 }; std::set_new_handler(outofmem); gmem = new int[100000000000 * Chunk]; //一旦失败调用outofmem. 不断的调用 return 0;}只要new 失败则一直调用此函数 , 直到有足够的内存为止, 意图在让你去释放一些内存;set_new_handler(0); 用来还原如果有需求一般写一个父类去实现:class MemHandler{ //用于还原handlerpublic: MemHandler(std::new_handler handler) :handler(handler){} ~MemHandler(){ std::set_new_handler(handler);}private: MemHandler(const MemHandler &) ; MemHandler & operator = (const MemHandler &); std::new_handler handler;};//也可以把此类写成 template <typename T>class NewHandlerBaseClass{public: static std::new_handler setNewHandler(std::new_handler newhandler) throw() { std::new_handler old_hanlder = m_handler; m_handler = newhandler; return old_hanlder; } //重载一个 static void * operator new (std::size_t size) throw (std::bad_alloc){ MemHandler memhandler(std::set_new_handler(m_handler)); //设置handler return ::operator new(size); //还是调用原来的new }private: static std::new_handler m_handler;};//如果上面的类是模版的话 . 每个类都有一个独立的static m_handler;class XClass : public NewHandlerBaseClass<XClass>{ ….};