'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;
这是正确的语法。您可以在这里找到参考资料:
考虑以下代码片段:
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;
这是正确的语法。您可以在这里找到参考资料: