new运算符是否会返回NULL?

ckv*_*ckv 18 c++ new-operator

可能重复:
在任何情况下new都会返回NULL吗?

说我有一个类Car,我创建一个对象

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

Jam*_*lis 42

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

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


Geo*_*che 9

不,new抛出std::bad_alloc分配失败.使用new(std::nothrow) Car,如果你不想异常,而不是.