假设我有一个Car类,我创建了一个对象
Car *newcar = new Car();
if(newcar==NULL) //is it valid to check for NULL if new runs out of memory
{
}
答案 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。