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));
为什么会这样?
答案 0 :(得分:27)
因为概念中的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>());
答案 1 :(得分:-1)
弱指针的主要目的通常是知道可能被其他代码销毁的对象是否仍然存在。从普通指针构造的弱指针怎么可能知道对象是否仍然存在?你能想象出一种可行的方式吗?