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

C++ new operator and error checking

本文关键字:错误 检查 运算符 C++      更新时间:2023-10-16

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

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

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的默认操作?

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

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

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