关于针对class自定义new操作符失败的函数处理
Posted 指尖上的快乐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于针对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操作符失败的函数处理的主要内容,如果未能解决你的问题,请参考以下文章
php 抛出一个异常throw new Exception(...),报错Class 'ss\Exception' not found为啥?