weak_ptr和unique_ptr一起工作吗?

时间:2017-03-09 16:44:43

标签: c++ c++14 smart-pointers unique-ptr weak-ptr

据我了解,std::weak_ptr用作引用可能已被解除分配的std::shared_ptr引用的内存的安全方式。是否可以与std::unique_ptr一起使用?

4 个答案:

答案 0 :(得分:5)

  

据我了解,std :: weak_ptr用作引用shared_ptrs引用的内存的安全方法,可能已经解除分配。

你理解错了。 std::weak_ptr允许访问对象,所有权由std::shared_ptr维护而不共享。现在当你真正理解std::weak_ptr时你应该理解你关于std::unique_ptr的问题没有任何意义。

答案 1 :(得分:2)

有一个等效指针充当std::unique_ptr的观察者,但不会像std::weak_ptr那样提供安全性。

该指针是原始指针。如果它们不比独特的所有者寿命长,它们是安全的。

如果您需要知道原始指针所有者的生命周期是否结束,那么不,那就没有办法,而且这不是std::unique_ptr的目标。

答案 2 :(得分:1)

不。

很遗憾,您必须使用std::shared_ptr,并记录std::weak_ptr只应暂时锁定。

答案 3 :(得分:0)

没有

weak_ptr可用的唯一构造函数是shared_ptr或另一个weak_ptr

http://en.cppreference.com/w/cpp/memory/weak_ptr/weak_ptr