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
通常是#define
d 0
):
甲空指针常数是整数表达式(5.19),用于评估至零或类型的prvalue整数类型的prvalue
std::nullptr_t
.空指针常量可以转换为指针类型; 结果是该类型的空指针值,并且可以与对象指针或函数指针类型的每个其他值区分开.
但是,nullptr
类型系统将其识别为类型的指针文字nullptr_t
和特殊的空指针常量,因此它的语义对于您和编译器都是清楚的.NULL
另一方面,只是一个已知扩展为零的宏.