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

Could a 'new' statement fail without throwing an exception?

考虑以下代码片段:

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

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

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

新语句 return NULL 对象可以不抛出异常吗?

LibObject* obj = new LibObject(); 

这里不要使用括号。如果你不想分配异常,你应该使用 std::nothrow

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

这是正确的语法。您可以在这里找到参考资料:

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