C++新的运算符和错误检查
C++ new operator and error checking
我正在微调一个小项目,我已经读到如果我尝试创建一个新对象,我可能会收到错误,如果失败,它会返回错误(内存损坏,内存不足?
所以我在想,在下面的一行:
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。
相关文章:
- C++中的输入限制和错误检查
- 在错误检查非 int 的内容时,控制台被淹没
- C++ 错误检查 fstream open() 命令和一般字符串流错误处理
- 运行时与编译时多态性:更好的可读性与编译时错误检查,更重要的是
- NPP 和 CUDA 错误检查
- 在此程序中获取错误:检查两个数组是否相等
- 错误 ~ 检查字符是否为小写字母
- 同时循环到错误检查 C++
- clang format函数和错误检查在同一行
- 使用宏进行赋值和错误检查
- 在C++中将命令行字符参数解析为int并进行错误检查
- 使用 Makefiles 在 Eclipse CDT 中进行错误检查
- 数据文件处理中的错误检查是否可以打开文件 - 为什么会发生
- 通过错误检查将参数转换为整数
- 这种错误检查方法的性能会不会太高
- C++通过错误检查将sscanf代码改编为distingstream
- 在windows错误检查中使用c++向gmail帐户发送电子邮件
- C++ 卷曲文件下载 - 错误检查
- 通过错误检查将 wstring 转换为双精度的方法
- 如何使用标准库函数通过错误检查将字符串 (char*) 转换为数字