由于建構式的std::shared_ptr
被標記為顯式的,所以運算式 likeauto 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();
}
此類代碼見于std::shared_ptr: reset() vs. assignment
uj5u.com熱心網友回復:
原始指標建構式是explicit
為了防止您意外獲得指標的所有權。由于沒有考慮獲取建構式的所有權,因此未nullptr
將其標記為顯式。std::nullptr_t
請注意,這僅適用于nullptr
空指標的這些其他分配可能不起作用(取決于您的編譯器):
auto p = std::make_shared<int>(1);
p = NULL;
int * a = nullptr;
p = a;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/442438.html