簡體   English   中英

為什么我不能將nullptr轉換為weak_ptr <>

[英]why i can't cast nullptr to weak_ptr<>

class MyClass {
public:
     MyClass(std::weak_ptr<MyClass> parent){}
}

我想做這個:

auto newInstance = std::make_shared<MyClass>(nullptr);

或者weak_ptr參數的默認值為null,例如:

void function(int arg,std::weak_ptr<MyClass> obj = nullptr);

但是,我需要的是這樣做:

auto newInstance = std::make_shared<MyClass>(std::shared_ptr<MyClass>(nullptr));

這是為什么?

因為概念中的weak_ptr只能從另一個weak_ptrshared_ptr構造。 從原始指針構造它是沒有意義的,無論它是否為nullptr

您可以使用默認構造的weak_ptrstd::weak_ptr<MyClass>() )來嘗試使用nullptr

auto newInstance = std::make_shared<MyClass>(std::weak_ptr<MyClass>());
void function(int arg,std::weak_ptr<MyClass> obj = std::weak_ptr<MyClass>());

弱指針的主要目的通常是知道可能被其他代碼銷毀的對象是否仍然存在。 從普通指針構造的弱指針怎么可能知道對象是否仍然存在? 你能想象出一種可行的方式嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM