C++箴言:理解new,第1张

C++箴言:理解new,第2张

当运算符new不能满足内存分配请求时,它会引发异常。很久以前,他返回了一个空指针(空指针),现在一些比较老的编译器还在这么做。你还是可以达到你之前的目标的(一定程度上),不过我会在本文最后讨论。

在operator new抛出异常以响应未满足的内存请求之前,它调用一个名为new-handler的错误处理函数(error handling function),这个函数可以由客户指定。(这并不完全正确。operator new真正做的事情比这个稍微复杂一点。细节将在下一篇文章中讨论。)为了指定内存不足处理函数,客户调用set _ new _ handler——一个标准库函数,在:

命名空间STD {
typedef void(* new _ handler)();
new _ handler set _ new _ handler(new _ handler p)throw();
}

可以看到,new_handler是一个指针的typedef,指向一个不获取也不返回任何东西的函数,而set_new_handler是一个获取并返回new_handler的函数。(set_new_handler声明末尾的“throw()”是一个异常规范。它基本上意味着这个函数不会抛出任何异常,尽管事实更有趣。详情请参考《C++箴言:争取卓越的安全代码》。)

set_new_handler的参数是一个函数的指针,当运算符new不能分配所请求的内存时,应该调用这个函数。set_new_handler的返回值是一个指向函数的指针,在调用set_new_handler之前,它是一个有效的目标。

您可以像这样使用set_new_handler:

// function to call if operator new can't allocate enough memory
void outOfMem()
{
 std::cerr

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++箴言:理解new

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情