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

Casting shared_ptr<Type> to weak_ptr<void> and back

如何将 weak_ptr<void> 转换为 shared_ptr<Type>

如何锁定 weak_ptr<void> 并最终生成 shared_ptr<Type>

Type 有一个非平凡的析构函数,假设 weak_ptr<...> 永远不会调用这个析构函数是否正确?

void weak pointer是我在这种情况下想要的,它仅用于监视多种类型的共享指针的引用计数,并在不拥有该对象的情况下将共享指针分配给现有对象(它是一部分一个对象的多个引用资源管理器)。

How would I get a weak_ptr<void> to a shared_ptr<Type>?

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

How would I lock a weak_ptr<void> and ultimately produce a shared_ptr<Type>?

调用lock()得到std::shared_ptr<void>,然后用std::static_pointer_cast.

Type has a non-trivial destructor, is it right to assume weak_ptr<...> will never call this destructor

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