shared_ptr<T>::get() 发布后的返回值是什么?
What is the return value of shared_ptr<T>::get() after it is released?
释放一个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。
相关文章:
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 为什么这个"ctypes"包装函数的返回值是"c_long(0)"而不是&quo
- 运算符和返回类型是什么意思?
- 是什么意思,返回值是一个类名,后跟一对空括号
- 布尔表达式的值是什么
- "警告:并非所有控制路径都返回值"是什么意思?(C++)
- STD :: SETW,STD :: SETFILL等的真实返回类型是什么?
- int main() 的返回值是什么意思,如何显示它?
- 当函数返回值是指针,而返回类型是c++中的引用时会发生什么
- rdstate() 返回值是什么意思
- strcmp的返回值是什么意思
- 对于空映射,map::begin() 的返回值是什么?
- CComBSTR::AssignBSTR()的可能返回值是什么
- shared_ptr<T>::get() 发布后的返回值是什么?
- 返回 int 但不显式返回任何内容的函数的返回值是什么。例如输出
- GetCurSel的返回值是什么
- 赋值操作符的返回类型是什么?
- 成功完成一个程序后返回给操作系统的正确值是什么?
- 赋值运算符的返回类型是什么
- C ++中新运算符的返回类型是什么?为什么我们可以将返回值分配给变量(非指针)?