上课笔记set_new_handler的实现
2016-11-11 20:49
197 查看
#include<iostream>
//#include<new.h>
#include<malloc.h>
using namespace std;
void out_of_memory()
{
cout<<"Out Of Memory!"<<endl;
//exit(1);
// return -1;
};
typedef void(* new_handler)();
void (* cur_handler)()=0;
void(* my_set_new_handler(void(* p)()))()
{
void (* old)()=cur_handler;
cur_handler=p;
return old;
}
void *operator new(size_t size)
{
if(size==0)
size=1;
while(1)
{
char* p=(char *)malloc(size*64);
if(p!=NULL)
return p;
void (* current)()=my_set_new_handler(0);
my_set_new_handler(current);
if(current!=NULL)
(*current)();
else
throw std::bad_alloc();
}
}
void main()
{
my_set_new_handler(out_of_memory);
int *p = new int[10479149179]; //回调方式 operator new
//int *p = new int[10];
if(p == NULL)
{
cout<<"Out Of Memery."<<endl;
exit(1);
}
cout<<"OK."<<endl;
}
//#include<new.h>
#include<malloc.h>
using namespace std;
void out_of_memory()
{
cout<<"Out Of Memory!"<<endl;
//exit(1);
// return -1;
};
typedef void(* new_handler)();
void (* cur_handler)()=0;
void(* my_set_new_handler(void(* p)()))()
{
void (* old)()=cur_handler;
cur_handler=p;
return old;
}
void *operator new(size_t size)
{
if(size==0)
size=1;
while(1)
{
char* p=(char *)malloc(size*64);
if(p!=NULL)
return p;
void (* current)()=my_set_new_handler(0);
my_set_new_handler(current);
if(current!=NULL)
(*current)();
else
throw std::bad_alloc();
}
}
void main()
{
my_set_new_handler(out_of_memory);
int *p = new int[10479149179]; //回调方式 operator new
//int *p = new int[10];
if(p == NULL)
{
cout<<"Out Of Memery."<<endl;
exit(1);
}
cout<<"OK."<<endl;
}
相关文章推荐
- 实现类的特定的set_new_handler,operator new ,operator delete
- 学习中遇到的问题-关于set_new_handler()
- BOOST源码笔记(5) - 最小的代价实现同步-无锁编程,看boost中的interlocked_bit_test_and_set实现
- 《编程珠玑》笔记13 不重复集set的实现
- 关于set_new_handler(转载)
- set_new_handler() C++
- shining cento in book reading: handle out of memory problem for new operator -by register a global SetNewHandler
- c++中的set_new_handler和new_handler
- set_new_handler
- My_Java之笔记(8)- 实现TreeSet集合的排序方法
- 关于 set_new_handler的总结
- STL学习笔记 ---- 由set的声明所引发的自定义比较的实现方式
- set_new_handler
- Java基础学习笔记(七)Set接口及其实现子类
- 内存分配异常之set_new_handler
- 关于_set_new_handler
- Java基础学习笔记(七)Set接口及其实现子类
- set_new_handler用法
- 关于set_new_handler
- 关于set_new_handler