new运算符是否会返回NULL? [重复]

问题描述 投票:15回答:3

可能重复: 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
{
}
c++ new-operator
3个回答
41
投票

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

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


9
投票

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


2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.