Arx*_*xel 2 c++ pointers new-operator
如果 new 运算符为指针分配了内存并且分配不成功,在 catch 块中将指针设置为 nullptr 是否安全?
foo* var;
try {
var = new foo[size];
}
catch (std::bad_alloc& e) {
std::cout << "Error: " << e.what() << "\n";
var = nullptr;
}
Run Code Online (Sandbox Code Playgroud)
Abh*_*del 12
另一种方法:
默认情况下,当使用 new 运算符分配内存而处理函数无法分配内存时,会抛出 bad_alloc 异常。但是当 nothrow 用作 new 的参数时,它会返回一个空指针。
因此,在您的情况下,您还可以使用以下语法。
foo* var = new (std::nothrow) foo[size];
if (var == nullptr)
{
//allocation failed
}
Run Code Online (Sandbox Code Playgroud)