首页 > 代码库 > 关于针对class自定义new操作符失败的函数处理
关于针对class自定义new操作符失败的函数处理
#include <iostream>#include <new>using namespace std;class CSaveCurHandler //用于管理new_handler,保存原始的new_handler,在new成功结束后还原.{private: new_handler cur;public: CSaveCurHandler(new_handler nh) :cur(nh){} ~CSaveCurHandler() { set_new_handler(cur); }};template<class T>class CWidget{private: static new_handler cur_handler;public: static void set_handler(new_handler nh) { cur_handler = nh; } static void *operator new(size_t size) throw(std::bad_alloc) { CSaveCurHandler sch(set_new_handler(cur_handler)); //将原始的保存至CSaveCurHandler对象中 return ::operator new(size); //,调用系统原始的new,返回后自动还原new_handler }};void outMen(){ cout << "内存不够";}template<class T>new_handler CWidget<T>::cur_handler = outMen;class MY : public CWidget<MY>{private: char buf[1025 * 1024 * 1024];};int main(){ MY::set_handler(outMen); while (1) MY *p = new MY; cin.get(); return 0;}
关于针对class自定义new操作符失败的函数处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。