将shared_ptr <Type>转换为weak_ptr <void>并返回

时间:2019-07-26 21:00:52

标签: c++ shared-ptr weak-ptr

我如何将weak_ptr<void>变成shared_ptr<Type>

我如何锁定weak_ptr<void>并最终产生一个shared_ptr<Type>

Type具有非平凡的析构函数,是否假设weak_ptr<...>永远不会调用此析构函数?

在这种情况下,我想要的是虚弱弱指针,它仅用于保持对多个类型的共享指针的引用计数的制表符,并给出对现有对象的共享指针,而无需自己拥有该对象(它是对象的一部分)。一个对象,许多引用资源管理器)。

1 个答案:

答案 0 :(得分:4)

  

我如何将weak_ptr<void>变成shared_ptr<Type>

std::shared_ptr<Type>可隐式转换为std::weak_ptr<void>

  

我如何锁定weak_ptr<void>并最终产生一个shared_ptr<Type>

致电lock()以获得std::shared_ptr<void>,然后使用std::static_pointer_cast

  

Type具有非平凡的析构函数,假设weak_ptr<...>永远不会调用此析构函数

是的。每当最后一个shared_ptr被销毁时,该对象就会被销毁。如果要使对象保持活动状态,则应该存储shared_ptr<void>而不是weak_ptr<void>。如果您不想让该对象保持活动状态,而只希望weak_ptr始终知道引用计数,那么就没有问题。