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()
的值是nullint*/code>值(而不是nullnullptr\u t
值或一个0
整数值),因此下面的表达式更接近typedef int*intp;if(p==intp{}{std::cout