'new'语句是否可以在不引发异常的情况下失败?
Could a 'new' statement fail without throwing an exception?
考虑以下代码片段:
try{
LibObject* obj = new LibObject();
if (!obj)
return 0;
}catch(...){
return 0;
}
return 1;
我不知道LibObject的实现,因为它来自一个外部库。
一般来说,检查新对象实例(obj)是否为NULL是否有意义?还是支票根本没用?
一个新语句是否可以在不引发异常的情况下返回NULL对象?
LibObject* obj = new LibObject();
这里不要用括号。如果您不想要alloc异常,则应该使用std::nothrow
LibObject* obj = new(std::nothrow) LibObject;
if (obj == nullptr) return 0;
else return 1;
这是正确的语法。你可以在这里找到一个参考:
http://www.cplusplus.com/reference/new/nothrow/
相关文章:
- 为什么此代码导致未处理的异常失败
- 使用双LL在C++中实现Stack失败,出现异常"EXC_BAD_ACCESS(代码=2,地址=0x7fff5
- 如何在使用 CFileDialog 打开文件失败时捕获异常
- 声纳库贝分析在 Eclipse 中失败,由于找不到异常语言"cpp"在本地分析中抛出错误
- 运行失败,没有任何异常
- 如何处理失败的方法:通过使用异常或使方法返回bool
- 捕获派生异常类型在 Clang/MacOS X 上失败
- 'new'语句是否可以在不引发异常的情况下失败?
- C++ 面向对象的编程异常失败
- vHRESULT 中未处理的异常失败
- C++自做异常处理失败
- 单元测试失败,异常代码为c0000005
- 异常类使用递归函数失败
- 程序在Turbo C中运行良好,但在MSVC中失败,出现未处理的异常
- 可能失败的函数的接收参数和移动语义(强异常安全性)
- 如何检查禁用异常的构造函数的失败
- 捕获异常:error: svd()收敛失败
- 试图在递归函数内部捕获失败的分配:未处理的异常/堆栈溢出
- c++异常处理失败
- 互斥锁解锁异常失败