之前,曾对new做了一些总结,详见"
new的理解".
在看《effective C++》第8章时,对内存分配有一些新的认识,这里主要讲一讲对set_new_handler的理解。
当使用nothrow_t版的operator new时,如果不能满足一个内存分配请求,会返回一个NULL指针。
void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) throw()
当使用throw (std::bad_alloc)版的operator new时,如果不能满足一个内存分配请求,会抛出一个异常。
void* operator new (std::size_t size) throw (std::bad_alloc)
在 operator new 因一个无法满足的内存请求而抛出一个异常之前,它先调用一个可以由客户指定的被称为 new-handler 的错误处理函数。
为了指定这个错误处理函数,客户需先设置 set_new_handler函数,内存分配失败后会反复调用这个new-handler 的错误处理函数。
错误处理函数的原型:
typedef void (*new_handler)(); //一个函数指针
set_new_handler的原型:
new_handler currentHandler = 0;
new_handler set_new_handler(new
在看《effective C++》第8章时,对内存分配有一些新的认识,这里主要讲一讲对set_new_handler的理解。
当使用nothrow_t版的operator new时,如果不能满足一个内存分配请求,会返回一个NULL指针。
void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) throw()
当使用throw (std::bad_alloc)版的operator new时,如果不能满足一个内存分配请求,会抛出一个异常。
void* operator new (std::size_t size) throw (std::bad_alloc)
在 operator new 因一个无法满足的内存请求而抛出一个异常之前,它先调用一个可以由客户指定的被称为 new-handler 的错误处理函数。
为了指定这个错误处理函数,客户需先设置 set_new_handler函数,内存分配失败后会反复调用这个new-handler 的错误处理函数。
错误处理函数的原型:
typedef void (*new_handler)(); //一个函数指针
set_new_handler的原型:
new_handler currentHandler = 0;
new_handler set_new_handler(new