如果 new 运算符失败,是否可以将指针设置为 null?
Can a pointer be set to null if new operator fails?
如果 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 的参数时,它 returns 而是一个空指针。
因此,在您的情况下,您还可以使用以下语法。
foo* var = new (std::nothrow) foo[size];
if (var == nullptr)
{
//allocation failed
}
如果 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 的参数时,它 returns 而是一个空指针。
因此,在您的情况下,您还可以使用以下语法。
foo* var = new (std::nothrow) foo[size];
if (var == nullptr)
{
//allocation failed
}