考虑以下代码片段:

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

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

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

新语句可以返回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/

10-08 13:55