shared_ptr<T>::get() 发布后的返回值是什么?

What is the return value of shared_ptr<T>::get() after it is released?

本文关键字:返回值 是什么 get ptr lt shared gt      更新时间:2023-10-16

释放一个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";
}

两者似乎都是结果

在c++ 11中,使用nullptr

在这种情况下,它们确实都是正确和等效的,因为它们都是空指针常量,如第4.10/1段所述(NULL通常是#define d是0):

空指针常量是一个整型常量表达式(5.19),其值为0或std::nullptr_t类型的右值。空指针常量可以转换为指针类型;的Result是该类型的空指针值,与对象指针或对象指针的其他值不同函数指针类型

然而,nullptr被类型系统识别为(类型nullptr_t指针文字)和一个特殊的空指针常量,因此它的语义对您和编译器都是清楚的。另一方面,NULL只是一个已知可以展开为0的宏。

2.14.7指针常量(lex.nullptr)

指针字面量是关键字nullptr。它是类型为std:: nullptr_t。[注:std::nullptr_t是一个不同的类型。既不是指针类型,也不是指向成员类型的指针;更确切地说,是一个右值此类型的是空指针常量,可以转换为空值指针值或空成员指针值

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