为什么 shared_ptr<int> p; p=空指针;编译?
Why does shared_ptr<int> p; p=nullptr; compile?
由于std::shared_ptr
的构造函数被标记为显式构造函数,所以auto p = std::make_shared<int>(1); p = new int(6);
这样的表达式是错误的。
我的问题是为什么 std::make_shared<int>(1); p = nullptr;
compile?
这是上述代码片段:
#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();
}
此类代码可见于 std::shared_ptr: reset() vs. assignment
原始指针构造函数是 explicit
以防止您意外获得指针的所有权。由于无需担心获得 nullptr
的所有权,因此 constructor 获得 std::nullptr_t
未标记为显式。
请注意,这仅适用于 nullptr
这些其他空指针赋值可能不起作用(取决于您的编译器):
auto p = std::make_shared<int>(1);
p = NULL;
int * a = nullptr;
p = a;
由于std::shared_ptr
的构造函数被标记为显式构造函数,所以auto p = std::make_shared<int>(1); p = new int(6);
这样的表达式是错误的。
我的问题是为什么 std::make_shared<int>(1); p = nullptr;
compile?
这是上述代码片段:
#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();
}
此类代码可见于 std::shared_ptr: reset() vs. assignment
原始指针构造函数是 explicit
以防止您意外获得指针的所有权。由于无需担心获得 nullptr
的所有权,因此 constructor 获得 std::nullptr_t
未标记为显式。
请注意,这仅适用于 nullptr
这些其他空指针赋值可能不起作用(取决于您的编译器):
auto p = std::make_shared<int>(1);
p = NULL;
int * a = nullptr;
p = a;