26
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));

这是为什么?

4

2 回答 2

41

因为 a weak_ptrin concept 只能由另一个weak_ptror构成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>());
于 2012-07-01T12:28:46.123 回答
-3

弱指针的主要目的通常是了解可能被其他代码破坏的对象是否仍然存在。从普通指针构造的弱指针怎么可能知道对象是否仍然存在?你能想象一种可行的方法吗?

于 2012-07-01T12:37:10.080 回答