请考虑智能指针std::unique_ptr
的以下用法:
std::unique_ptr<char> sp(new(std::nothrow) char[sz]);
如何检查new
是否成功?
我有两个选择:
if(!sp){}
if(sp==nullptr){}
#include <iostream>
#include <memory>
using namespace std;
int main() {
constexpr long long sz = 1000000e10;
//raw pointer
auto ptr = new(std::nothrow) char[sz];
if(ptr==nullptr)
{
cout<<"ptr nullptr"<<endl;
}
//smart pointer
std::unique_ptr<char> sp(new(std::nothrow) char[sz]);
if(!sp)
{
cout<<"sp nullptr bool"<<endl;
}
if(sp==nullptr)
{
cout<<"sp nullptr =="<<endl;
}
return 0;
}
Success #stdin #stdout 0s 4396KB
ptr nullptr
sp nullptr bool
sp nullptr ==
方法1和方法2似乎都可以使用。
但是,我想从权威来源(C ++标准,msdn,gcc文档)中读取这确实是正确的方法。
答案 0 :(得分:3)
作为权威人士,我可以确认两种方法确实正确。
开个玩笑:std::unique_ptr
的{{3}}和operator ==(std::nullptr_t)
重载以执行指针期望的操作,所以是的,尽管方法1更惯用,但两者都是正确的