c++ - c++中带有智能指针的循环双链表

标签 c++ smart-pointers

是否可以在C++中使用智能指针创建循环双向链表

struct Node {
  int val;
  shared_ptr<Node> next;
  weak_ptr prev;
};

shared_ptr<Node> head;

但这将有共享指针的循环引用,因此无法正确释放。

最佳答案

使循环链表本身成为一个类(使用构建它所需的任何操作,如追加)。通过设置 tail->next = nullptr 让它的析构函数断开链接。断开哪个链接应该无关紧要,因此如果您不使用头部和尾部,只需将它们中的任何一个设置为 nullptr,就可以了。

在我的测试中,我做了一个循环链表,节点没有析构。然后在最后,我在它退出之前添加了 tail->next = nullptr,并且所有的析构函数都正确地触发了。

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

相关文章:

c++ - 为什么宇宙飞船允许混合比较(不同的模板实例)与无意义的结果?

c++ - 如何通过编写编辑器来学习C++?

c++ - 是否可以使静态控件透明?

c++ - 寻找一个智能指针,它会在复制智能指针本身时复制底层资源

c++ - 如何获取 com_ptr_t 中指针的地址

C++ 将 #define 复制到 char 数组

c++ - 我如何着手允许类类型的对象未初始化并在不使用指针的情况下识别这种情况?

c++ - 第一次分配后如何更改const std::shared_ptr?

c++ - 在运行时动态设置 vector 类

c++ - 裸指针到底有多糟糕?