241 字
1 分钟
C++内存管理- 16
C++内存管理 - 16
此笔记需要等待更新和确认。
New Handler
当使用new申请内存失败时会抛出"bad alloc"异常,此前会调用一个由std::set_new_handler()指定的错误处理函数(“new-handler”)。
如下是一个最简单的形式
void outOfMem(){ std::cout<<"Unable to alloc memory"; std::abort();}int main(){ std::set_new_handler(outOfMem); int *p = new int[100000000L];}当new申请不到足够的内存时,它会不断地调用outOfMem。因此一个良好设计的系统中outOfMem函数应该做如下几件事情之一:
-
使更多内存可用;
-
安装一个新的”new-handler”;
-
卸载当前”new-handler”,传递
null给set_new_handler即可; -
抛出
bad_alloc(或它的子类)异常; -
不返回,可以
abort或者exit。
关于abort, exit, terminate的区别:abort会设置程序非正常退出,exit会设置程序正常退出,当存在未处理异常时C++会调用terminate, 它会回调由std::set_terminate设置的处理函数,默认会调用abort。

C++内存管理- 16
https://sterben-01.github.io/posts/memory6/