为什么我不能将nullptr施加到feek_ptr <>

问题描述 投票:0回答:3
class MyClass {
public:
     MyClass(std::weak_ptr<MyClass> parent){}
}
我想这样做:

auto newInstance = std::make_shared<MyClass>(nullptr);
或neak_ptr参数的默认值为null,例如:

void function(int arg,std::weak_ptr<MyClass> obj = nullptr);
,但我需要做的是:

auto newInstance = std::make_shared<MyClass>(std::shared_ptr<MyClass>(nullptr));
为什么?

c++ casting null shared-ptr weak-ptr
3个回答
49
投票
由于概念中的一个

weak_ptr

只能由另一个或
weak_ptr
构建。无论是
shared_ptr
是否
nullptr
您可以使用默认构造的

weak_ptr

std::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>());
    

0
投票
Weak_ptr的成员函数已过时()您可以检查它仍然有效。

https://www.youtube.com/watch?v = tp5-f9yaznk

<- I have it from this video


-4
投票

© www.soinside.com 2019 - 2025. All rights reserved.