这是我所知道的关于智能指针的事情
- shared_ptr 是一个智能指针,多个shared_ptr 可以指向堆中的一个对象。即使删除了 shared_ptr 之一,只要其引用计数大于零,堆中的对象就不会被销毁。
- weak_ptr 也指向堆中的一个对象,但它不会增加该对象的引用计数
- 我们可以使用 weak_ptr 来打破循环引用
在双向链表的情况下,我们有两个指针指向上一个和下一个节点。我们在实现中使用了 shared_ptr 和 weak_ptr。为什么我们不使用两个 weak_ptr ?
最佳答案
我们不使用两个 weak_ptr
因为它不起作用。
想象一个包含两个节点的列表。列表头是第一个节点的非弱指针。所以第一个节点保持事件状态。但是什么非弱指针让第二个节点保持事件状态?
管理对象的生命周期有两个挑战。他们应该活得足够久,但不要太久。这不仅适用于 C++ 或智能指针,这是几乎所有编程语言中的基本问题。您可以通过理解您正在处理的问题并使用您的语言提供的工具来表达该问题来解决它。
关于c++ - 在双向链表中使用智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52141752/