gpt4 book ai didi

c++ - 链表节点的 RAII 风格 C++ 类

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:19 24 4
gpt4 key购买 nike

我现在正在玩链表作为练习。

我在 Cracking The Coding Interview 中查看的示例book 没有 LinkedList (manager) 类,只有 Nodes,你在 main 函数中卡在 head Node 上。

我查阅了 C++ 实现,但大多数似乎比 C++ 更像 C 风格,即不是面向对象的。它们使用结构,没有类,并且有一个用于删除列表的静态方法,您需要明确记住要调用该方法。我想编写一个合理的 RAII(资源获取即初始化)风格的 C++ 类,带有合理的析构函数来处理内存释放,我只想使用一个 Node 类(没有 LinkedList 类)。

我看到这个工作的唯一方法是让 Node 的析构函数删除下一个 Node(如果有的话),但我读到这种递归删除是一个坏主意,因为你最终创建了一个调用堆栈与链表长度相同。

总结一下我的问题:

  • 如果用 C++ 编写一个面向对象的类来处理链表,您是否必须有一个 LinkedList(管理器)类来处理其析构函数中列表节点的删除?
  • 如果没有,您将如何处理节点的破坏?

谢谢!

最佳答案

If writing an object-oriented class to handle linked lists in C++, do you have to have a LinkedList (manager) class which handles the deletion of the list nodes in its destructor?

不,结构是由节点之间的链接定义的,因此不需要单独的管理器对象。有时拥有一个会更方便,特别是如果您正在设计像 STL 这样的库并希望所有容器都具有相似的接口(interface),但您当然可以只使用节点类型来实现链表。

If not, how would you deal with destruction of Nodes?

避免递归的一种方法是在删除之前从列表中删除每个节点,例如:

~node() {
while (node * victim = next) {
next = victim->next;
victim->next = nullptr;
delete victim;
}
}

关于c++ - 链表节点的 RAII 风格 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11795035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com