发布后,shared_ptr <T> :: get()的返回值是多少?

shi*_*mar 3 c++ shared-ptr c++11

释放后std::shared_ptr<T>,当我这样做的时候ptr.get()是返回值NULL还是nullptr?为了比较,我使用了这个:

std::shared_ptr<int> ptr(new int(44));

ptr.reset();
int *p = ptr.get();

if (p == nullptr)
{
    cout << "nullptr";
}

if (p == NULL)
{
    cout << "NULL";
}
Run Code Online (Sandbox Code Playgroud)

两者似乎都是结果.

And*_*owl 12

在C++ 11中,使用nullptr.

确实,在这种情况下它们都是正确的和等价的,因为它们都是由段落4.10/1指定的空指针常量(NULL通常是#defined 0):

空指针常数是整数表达式(5.19),用于评估至零或类型的prvalue整数类型的prvalue std::nullptr_t.空指针常量可以转换为指针类型; 结果是该类型的空指针值,并且可以与对象指针或函数指针类型的每个其他值区分开.

但是,nullptr类型系统将识别为类型指针文字nullptr_t和特殊的空指针常量,因此它的语义对于您和编译器都是清楚的.NULL另一方面,只是一个已知扩展为零的宏.