在双向链表中使用智能指针

Gau*_*Das 1 c++ pointers smart-pointers weak-ptr c++14

以下是我对智能指针的了解

  1. shared_ptr是一个智能指针,多个shared_ptr可以指向堆中的一个对象。即使删除了共享指针之一,只要引用计数大于零,堆中的对象就不会被销毁。
  2. 一个weak_ptr也指向堆中的一个对象,但它不会增加该对象的引用计数
  3. 我们可以使用weak_ptr来打破循环引用

在双向链表的情况下,我们有两个指针指向前一个和下一个节点。我们在实现中使用了shared_ptr和weak_ptr。为什么我们不使用两个weak_ptr?

MSa*_*ers 5

我们不使用两个,weak_ptr因为它不起作用。

想象一个有两个节点的列表。列表头是第一个节点的非弱指针。所以第一个节点保持活动状态。但是什么非弱指针可以让第二个节点保持活动状态呢?

管理对象的生命周期有两个挑战。他们应该活得足够长,但不能太长。这不仅适用于 C++ 或智能指针,这几乎是所有编程语言的基本问题。您可以通过理解您正在解决的问题并用您的语言提供的工具表达该问题来解决它。