为了账号安全,请及时绑定邮箱和手机立即绑定

想问下大家一般都怎么处理new返回空的这个问题?

想问下大家一般都怎么处理new返回空的这个问题?

C++
繁星点点滴滴 2023-04-06 19:15:44
开发环境 VS2008想问下如果new的时候内存不够是是会返回NULL呢还是会直接抛出异常因为延续以前写C的习惯,malloc完了以后检查返回值,为空怎么处理,不为空怎么处理这样每个new的位置都会多出一堆代码最近看到貌似默认的new是直接抛出异常的?如果不希望抛出异常是用new(nothrow)那正常情况下应该不需要处理new的返回啦?捕获这个异常然后提示内存不足把程序退出就可以了?那么这个捕获放哪?把整个程序都放在try里面?会不会影响程序效率?
查看完整描述

2 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

异常在不发生的时候,是几乎没有额外代价的,而且像内存用尽这样的异常,本来就是应该在应用程序最高层处理的,因为除了这样,也没别的什么事情好做。
总之,在整个应用程序最高层处理 bad_alloc 这样的异常,远远好于每次去检查 new 的结果是否为真。

查看完整回答
反对 回复 2023-04-10
?
跃然一笑

TA贡献1826条经验 获得超6个赞

在进程空间没有足够大的连续内存块时,new会默认调用new_handler抛出异常。如果你要改,可以通过注册set_new_handler这个回调函数。

我觉得这是个异常,所以还是要捕捉的,就捕捉new就可以了。如果你觉得每次都写代码麻烦,就自己包装一下


查看完整回答
反对 回复 2023-04-10
  • 2 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信