Joh*_*ohn 4 c++ explicit smart-pointers shared-ptr c++11
由于 的构造函数std::shared_ptr被标记为显式构造函数,因此 like 的表达式auto p = std::make_shared<int>(1); p = new int(6);是错误的。
我的问题是为什么std::make_shared<int>(1); p = nullptr;编译?
这是前面提到的代码片段:
#include <memory>
#include <iostream>
int main()
{
auto p = std::make_shared<int>(1);
//p = new int(6);
p = nullptr;
if(!p)
{
std::cout << "not accessable any more" << std::endl;
}
p.reset();
}
Run Code Online (Sandbox Code Playgroud)
原始指针构造函数是explicit为了防止您意外获取指针的所有权。由于不存在获取构造nullptr函数所有权std::nullptr_t的问题,因此未将其标记为显式。
请注意,这仅适用于nullptr空指针的其他分配可能不起作用(取决于您的编译器):
auto p = std::make_shared<int>(1);
p = NULL;
int * a = nullptr;
p = a;
Run Code Online (Sandbox Code Playgroud)