问一个愚蠢的问题。据我了解,weak_ptr 的一种用法是检查对象上共享指针的计数状态。我们不能只使用shared_ptr use_count() 来获取此信息吗?如果是这样为什么需要weak_ptr?
不,不,我们不能。
weak_ptr
的想法是我们想要引用某些东西,但我们自己不想让它保持活力;那就是当强引用消失时,对象也消失了;当我们解析弱指针时,我们会得到一个空值。
weak_ptr
的一个例子可能是二叉树;假设每个节点都需要对其父节点的引用。如果您使用 shared_ptr
来引用父节点,则会出现导致内存泄漏的循环,但父节点上的 weak_ptr
不会。
弱指针还有其他用途,您可以从与其实际生命周期无关的位置引用某个大对象;但构建一个易于理解的小示例并不简单。