C++ shared_ptr<;的返回值是多少;T>;::在发布后获取()吗?

C++ shared_ptr<;的返回值是多少;T>;::在发布后获取()吗?,c++,c++11,shared-ptr,C++,C++11,Shared Ptr,释放std::shared\u ptr后,当我执行ptr.get()时,返回值是NULL还是NULL ptr?为了进行比较,我使用了以下方法: std::shared_ptr<int> ptr(new int(44)); ptr.reset(); int *p = ptr.get(); if (p == nullptr) { cout << "nullptr"; } if (p == NULL) { cout << "NULL"; }

释放
std::shared\u ptr
后,当我执行
ptr.get()
时,返回值是
NULL
还是
NULL ptr
?为了进行比较,我使用了以下方法:

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

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

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

if (p == NULL)
{
    cout << "NULL";
}
std::shared_ptr ptr(新int(44));
ptr.reset();
int*p=ptr.get();
如果(p==nullptr)
{

在C++11中,使用
nullptr

诚然,在这种情况下,它们都是正确的和等效的,因为它们都是第4.10/1段规定的空指针常量(
null
通常是
#将
d定义为
0
):

空指针常量是整数类型的整数常量表达式(5.19)prvalue,其计算结果为 零或类型为
std::nullptr\u t
的prvalue。可以将空指针常量转换为指针类型 结果是该类型的空指针值,并可与对象指针的所有其他值或 函数指针类型

但是,
nullptr
被类型系统识别为类型
nullptr\u t
指针文本,并且是一个特殊的空指针常量,因此它的语义对您和编译器都是清楚的。
null
则只是一个已知可扩展为零的宏

2.14.7指针文本[lex.nullptr]

指针文本是关键字nullptr。它是类型为的prvalue std::nullptr\u t。[注意:std::nullptr\u t是一种独特的 既不是指针类型也不是指向成员类型的指针;而是prvalue 此类型的是空指针常量,可以转换为空指针常量 指针值或空成员指针值


两者都是等效的,但是您应该更喜欢使用nullptr。

如果没有
if(nullptr==NULL),您的测试是不完整的{你可能不知道的另一件事是,
shared\u ptr
有一个对
bool
的隐式强制转换,它基本上等同于
p!=nullptr
。因此你可以编写
p==nullptr
!p
,以你更直观的为准。
ptr.get()
的值是null
int*/code>值(而不是null
nullptr\u t
值或一个
0
整数值),因此下面的表达式更接近
typedef int*intp;if(p==intp{}{std::cout