如果没有抛出异常,“新”语句会失败吗?

时间:2015-02-25 11:26:35

标签: c++ new-operator

请考虑以下代码段:

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

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

一般来说,检查新对象实例(obj)是否为NULL可能有任何意义吗?或者支票根本没用?

新语句是否可以在不抛出异常的情况下返回NULL对象?

1 个答案:

答案 0 :(得分:1)

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/