如果 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`
email - SendGrid Automated Security 如何处理 SPF 记录?
.net-core - Cake Clean 任务在蛋糕构建时被跳过
postgresql - 我想用 mikro-orm 插入,但它找不到我的表 :c (TableNo