我为什么要检查操作员NEW的返回值?

时间:2010-09-28 08:57:04

标签: c++

迈耶斯在他的书“50 ways to improve..."第二版中写道,我必须检查新的返回类型,但我知道如果operator NEW无法分配内存,它会抛出exception,所以更新的图书馆我不需要检查新的返回值,我是对的吗?提前谢谢

2 个答案:

答案 0 :(得分:2)

一般来说,我认为你是对的:现代图书馆通常会为此抛出异常。但是如果你正在分发源代码,一些编译器仍会返回NULL而不是抛出异常。在这些情况下,它可能很有用,但这取决于你是否会去那里调试它以及这个程序的稳定性有多么重要。

此外,其他人指出,现在这是一个如此模糊的问题,负担是使用古代编译器的人。

答案 1 :(得分:0)

不,因为C ++允许new在失败时也返回NULL。

  

$ 5.3.4 / 13 - “[注:除非   分配函数声明为   一个空的异常规范   (15.4),throw(),表示失败   通过抛出来分配存储空间   bad_alloc例外(第15条,   18.4.2.1);否则返回非空指针。 如果配置   函数声明为空   异常规范,throw(),它   返回null表示失败   分配存储和非空   指针否则。 ] 如果分配   函数返回null,初始化   不得重新分配   函数不应该调用,而且   new-expression的值应为   空。