是否可以在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/