如果new运算符失败,可以将指针设置为null吗?
如果 new 运算符为指针分配了内存并且分配不成功,在 catch 块中将指针设置为 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
}