3

我正在微调一个小项目,并且我读到如果我尝试创建一个新对象,我会得到错误,如果它失败,它会返回一个错误(损坏的内存,内存不足?)。

所以我在想,在下面的行中:

Object* myObj = new Object();

在项目中通常是怎么做的?

Object* myObj;
try
{
    myObj = new Object();
}
catch (std::bad_alloc&)
{ 
    //Deal with the Error 
}

或者...

Object* myObj = new (std::nothrow) Object();
if(!myObj)
{
    //Deal with the Error
}

我假设#2 是最好的操作,因为尝试/捕获每一个新的似乎太多的开销。

只是想寻找所有新关键字并在各处添加错误检查是......令人沮丧。还有其他选择吗?或者某些选项将(std::nothrow)作为 new 的默认操作?

4

2 回答 2

1

这取决于,这取决于您希望如何处理特定代码路径中的错误。

如果您的代码可以检查错误并在错误时使用不同的代码路径继续前进,例如在程序继续运行时采用不同的条件或向用户返回错误,那么 nothrow 选项会更好。如果您的程序在内存不足时无法继续(更常见的情况),那么您可以在顶层(主)捕获异常并记录正确的错误并中止程序,而不是对每个新的进行尝试/捕获.

于 2013-09-05T06:39:19.727 回答
1

分配失败可能是一个重大错误,以至于程序无论如何都必须终止,所以如果有任何事情,它更经常在更高级别(如果有的话)处理,错误的处理只是简单地通知用户它然后出口。

于 2013-09-05T06:15:39.307 回答