说我有一类车,我创建了一个对象
Car *newcar = new Car();
if(newcar==NULL) //is it valid to check for NULL if new runs out of memory
{
}
说我有一类车,我创建了一个对象
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
)。
上(即发布了标准化的语言之前尤其是那些),或者在例外明确禁用(例如,也许一些编译器的嵌入式系统),new
可以在失败时返回NULL
的情况下一些老的C++编译器。这样做的编译器不符合C++标准。
没错!在C++中做到这一点的方式是使用try/catch块。这里是一个例子:http://www.cplusplus.com/reference/std/new/bad_alloc/ – karlphillip 2010-08-02 16:04:57
默认情况下,C++在新操作符失败时抛出std :: bad_alloc异常。因此,除非明确禁用异常使用,否则不需要检查NULL。
...如果你禁用异常使用,那么语言不再是C++。 – 2010-08-02 16:20:12
不,new
在分配失败时抛出std::bad_alloc
。如果您不需要例外,请使用new(std::nothrow) Car
。
我已经看过很多次了,想知道为什么新会抛出一个内存异常。我想它来自曾经在C中工作并且现在是C++的开发人员。
你究竟是什么意思?它没有在C中抛出异常,我不确定你认为哪些行为是合理的,如果这两者都不是。 – Chuck 2010-08-02 16:00:05
“检查为空”,我认为他的意思是。 – 2010-08-02 16:03:00
“检查无效”广泛的堵嘴反射确实是某些VC6程序员当时实现'new',决定返回NULL是明智的做法。也许malloc做到了,自从新包装malloc ... – 2015-05-15 05:55:05
重复的[在任何情况下都会返回NULL?](http://stackoverflow.com/questions/550451/will-new-return-null-in-any-case) – 2010-08-02 15:57:37