繁体   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