c++ - 如果 new 运算符失败,是否可以将指针设置为 null?

如果 new 运算符为指针分配了内存但分配不成功,那么在 catch block 中将指针设置为 nullptr 是否安全?

foo* var;
try {
    var = new foo[size];
}
catch (std::bad_alloc& e) {
    std::cout << "Error: " << e.what() << "\n";
    var = nullptr;
}

最佳答案

另一种方法:

默认情况下,当使用 new 运算符分配内存而处理函数无法分配内存时,将抛出 bad_alloc 异常。 但是当 nothrow 被用作 new 的参数时,它返回一个空指针。

因此,在您的情况下,您还可以使用以下语法。

foo* var = new (std::nothrow) foo[size];

if (var == nullptr)
{
   //allocation failed
}

https://stackoverflow.com/questions/66938233/

相关文章:

ios - React native Pod 安装得到权限被拒绝

c++ - 为什么C++语言的malloc函数前面要写指针类型?

html - 将样式添加到 mat-autocomplete 的 mat-option

dart - 在 Dart 中,给定可空类型 `T?` ,我如何获得不可空类型 `T`

python - 在合并和排序函数中列出超出范围的索引

email - SendGrid Automated Security 如何处理 SPF 记录?

.net-core - Cake Clean 任务在蛋糕构建时被跳过

postgresql - 我想用 mikro-orm 插入,但它找不到我的表 :c (TableNo

reactjs - 配置多个下一个插件 : withMDX, withBundleAnalyzer

javascript - 使用 filter() 而不是 map() 来修改对象数组?