C++ 如果新运算符失败,指针是否可以设置为null?

C++ 如果新运算符失败,指针是否可以设置为null?,c++,pointers,new-operator,C++,Pointers,New Operator,如果新操作符为指针分配了内存,但分配不成功,那么在catch块中将指针设置为nullptr是否安全 foo* var; try { var = new foo[size]; } catch (std::bad_alloc& e) { std::cout << "Error: " << e.what() << "\n"; var = nullptr; } foo*var; 试一试{ var

如果新操作符为指针分配了内存,但分配不成功,那么在catch块中将指针设置为nullptr是否安全

foo* var;
try {
    var = new foo[size];
}
catch (std::bad_alloc& e) {
    std::cout << "Error: " << e.what() << "\n";
    var = nullptr;
}
foo*var;
试一试{
var=新的foo[size];
}
捕获(标准::错误分配和e){

std::cout另一种方法:

默认情况下,当新运算符用于分配内存,而处理函数无法这样做时,将引发bad_alloc异常。 但当nothrow用作new的参数时,它将返回一个空指针

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

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

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

如果
operator new
抛出,则永远不会分配指针。因此,是的,将其设置为
nullptr
是安全的。事实上,您永远不应该让它未初始化。相反,如果您执行
foo*var=nullptr;
操作之前,您不必明确地将其设置为
nullptr
为什么不使用
new(std::nothrow)
,例如
foo*var=new(std::nothrow)foo[size]
?如果失败,它将返回空指针,并且不会抛出。