new运算符是否会返回NULL?

时间:2010-08-02 15:53:02

标签: c++ new-operator

  

可能重复:
  Will new return NULL in any case?

假设我有一个Car类,我创建了一个对象

Car *newcar  = new Car();
if(newcar==NULL) //is it valid to check for NULL if new runs out of memory
{
}

3 个答案:

答案 0 :(得分:39)

在符合标准的C ++实现上,没有。 new的普通形式永远不会返回NULL;如果分配失败,将抛出std::bad_alloc异常(new (nothrow)表单不会抛出异常,如果分配失败,将返回NULL

在一些较旧的C ++编译器(特别是那些在语言标准化之前发布的编译器)或者在显式禁用异常的情况下(例如,可能是嵌入式系统的某些编译器),new可能会返回{{1失败。执行此操作的编译器不符合C ++标准。

答案 1 :(得分:9)

不,new抛出std::bad_alloc分配失败。如果您不想要例外,请使用new(std::nothrow) Car

答案 2 :(得分:2)

默认情况下,当new运算符失败时,C ++会抛出std :: bad_alloc异常。因此,除非您明确禁用了异常使用,否则不需要检查NULL。