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

标签 c++ pointers c++14 smart-pointers weak-ptr

这是我所知道的关于智能指针的事情

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

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

最佳答案

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

想象一个包含两个节点的列表。列表头是第一个节点的非弱指针。所以第一个节点保持事件状态。但是什么非弱指针让第二个节点保持事件状态?

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

关于c++ - 在双向链表中使用智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52141752/

相关文章:

c++ - "new int[8]()"是否等同于 C++11 中的 "new int[8]{}"?

c++ - 是否可以从父类 "this"指针类型强制转换为子类

c++ - 自动类型到自动方法失败。为什么?

c++ - 尝试使用 Redispp 在类中设置全局 Redis 连接

C++ 编译器无法从迭代器派生出正确的类型

c++ - 使用外部SDK工具链文件的VisualStudio上的CMake项目编译错误

c++ - C/C++ 静态库当前目录

c - 即使在初始化动态分配的结构数组的成员之后仍然存在垃圾值

c - 使用指针反转字符串

c++ - 模仿 "pointer to a reference"的类可以保存超出范围的变量吗?