'new'语句是否可以在不引发异常的情况下失败?



考虑以下代码片段:

try{
LibObject* obj = new LibObject();
if (!obj)
    return 0;
}catch(...){
    return 0;
}
return 1;

我不知道LibObject的实现,因为它来自一个外部库。

一般来说,检查新对象实例(obj)是否为NULL是否有意义?还是支票根本没用?

一个新语句是否可以在不引发异常的情况下返回NULL对象?

LibObject* obj = new LibObject(); 

这里不要用括号。如果您不想要alloc异常,则应该使用std::nothrow

LibObject* obj = new(std::nothrow) LibObject;
if (obj == nullptr) return 0;
else return 1;

这是正确的语法。你可以在这里找到一个参考:

http://www.cplusplus.com/reference/new/nothrow/

最新更新