当operator new没有能力申请到所需要的空间时,通常会丢一个exception(异常类)打印出信息。
常见的 C 习惯做法:
定义一个与型别无关的宏,用来配置内存,并做检查,以确定配置成功。
对于C++而言的宏如下
#define NEW(PTR,TYPE)
try{ (PTR)=new TYPE;}
catch(std::bad_alloc&) { assert(0); }
他有一个专属C++的缺点:
他没有把new的使用方法纳入考虑,T类型有三个常见的语法形式,需要你处理没每一种
形式发生exceptions的可能性
new T;
new T(构造);
new T[size];
错误处理策略:
当内存需求无法获得满足,让系统调用一个你所指定的函数。
即(当operator new无法满足需求时,它会在抛出exception之前先调用一个client专属的错误处理函数)-new_handler函数
new_handler(内存处理不足函数)
set_new_handler 函数来自头文件 <new>
new_handler是函数指针, 没有参数和返回值。->指向内存不足时,调用的函数
set_new_handler是个函数,new_handler是参数和返回值。
例如:new_handler set_new_handler(new_handler p) throw();
set_new_handler的使用
void noMoreMemory()