说我有一个类Car,我创建一个对象
Car *newcar = new Car();
if(newcar==NULL) //is it valid to check for NULL if new runs out of memory
{
}
在符合标准的C ++实现上,没有。普通形式的new
将永远不会返回NULL
;如果分配失败,将抛出std::bad_alloc
异常(new (nothrow)
形式不会抛出异常,并且如果分配失败将返回NULL
)。
在一些较旧的C ++编译器(特别是那些在语言标准化之前发布的编译器)或在明确禁用异常的情况下(例如,可能是嵌入式系统的某些编译器),new
可能会在失败时返回NULL
。执行此操作的编译器不符合C ++标准。
不,new
在分配失败时抛出std::bad_alloc
。如果您不想要例外,请使用new(std::nothrow) Car
。
默认情况下,当new运算符失败时,C ++会抛出std :: bad_alloc异常。因此,除非您明确禁用了异常使用,否则不需要检查NULL。