C ++新运算符和错误检查

时间:2013-09-05 06:09:05

标签: c++

我正在调整一个小项目,我已经读过,如果我尝试创建一个新对象,我会收到错误,如果失败则会返回错误(内存损坏,内存不足?)。

所以我在想,在下面这一行:

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)成为新的默认操作?

2 个答案:

答案 0 :(得分:1)

分配失败可能是一个很大的错误,无论如何必须终止程序,所以如果有的话,更经常处理更高级别(如果有的话)处理错误只是告诉用户然后退出。

答案 1 :(得分:1)

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

如果你的代码可以检查错误并继续使用不同的错误代码路径,比如在程序继续时采取不同的条件或向用户返回错误,那么nothrow选项更好。如果你的程序无法继续,如果你的内存不足(更常见的情况),那么你可以在顶层(主要)捕获异常并记录正确的错误并中止程序