我正在调整一个小项目,我已经读过,如果我尝试创建一个新对象,我会收到错误,如果失败则会返回错误(内存损坏,内存不足?)。
所以我在想,在下面这一行:
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)成为新的默认操作?
答案 0 :(得分:1)
分配失败可能是一个很大的错误,无论如何必须终止程序,所以如果有的话,更经常处理更高级别(如果有的话)处理错误只是告诉用户然后退出。
答案 1 :(得分:1)
具体取决于您希望如何处理特定代码路径中的错误。
如果你的代码可以检查错误并继续使用不同的错误代码路径,比如在程序继续时采取不同的条件或向用户返回错误,那么nothrow选项更好。如果你的程序无法继续,如果你的内存不足(更常见的情况),那么你可以在顶层(主要)捕获异常并记录正确的错误并中止程序