new失败跟踪函数_关于针对class自定义new操作符失败的函数处理
#include
#include
using namespace std;
class CSaveCurHandler //用于管理new_handler,保存原始的new_handler,在new成功結(jié)束后還原.
{
private:
new_handler cur;
public:
CSaveCurHandler(new_handler nh) :cur(nh){}
~CSaveCurHandler()
{
set_new_handler(cur);
}
};
template
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對(duì)象中
return ::operator new(size); //,調(diào)用系統(tǒng)原始的new,返回后自動(dòng)還原new_handler
}
};
void outMen()
{
cout << "內(nèi)存不夠";
}
template
new_handler CWidget::cur_handler = outMen;
class MY : public CWidget
{
private:
char buf[1025 * 1024 * 1024];
};
int main()
{
MY::set_handler(outMen);
while (1)
MY *p = new MY;
cin.get();
return 0;
}
原文:http://www.cnblogs.com/c-slmax/p/5946413.html
總結(jié)
以上是生活随笔為你收集整理的new失败跟踪函数_关于针对class自定义new操作符失败的函数处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 采用 J2EE 的公司正在考虑改用 Mi
- 下一篇: 三星android rom开发者,六年老