目录
源代码解释总结出自《STL源码剖析》第45页中有一行代码set_new_handler(0);
源代码
inline T* _allocate(ptrdiff_t size, T*)
{
std::set_new_handler(0);
T* tmp = (T*)(::operator new((size_t)(size * sizeof(T))));
if (tmp == 0)
{
std::cerr << "out of menory" << std::endl;
}
return tmp;
}
解释
首先说一下C++对内存分配的原理。如果程序员决定用new>
因为在这个例子中是一个模板函数,所以说谁也不知道用户在模板实例化的时候前面有没有给set_new_handler指定什么自定义的内存不够处理函数。所以这个用set_new_handler(0),就是为了强制C++在内存不够的时候抛出std:bad_alloc,而不是去执行什么其他自定义的内存不够处理程序。所以这里用set_new_handler(0)不是没有用,而是强制C++在内存不够的时候一定要抛出std:bad_alloc异常
总结
set_new_handler(0)主要是为了卸载目前的内存分配异常处理函数,这样就会导致一旦分配内存失败,C++就会强制性抛出std:bad_alloc异常,而不是跑到处理某个异常处理函数去处理。
到此这篇关于set_new_handler(0)有什么用的文章就介绍到这了,更多相关set_new_handler(0)内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!










