正在解构链表
Deconstructing Linked List
本文关键字:链表 更新时间:2023-10-16
我正在执行一项任务,该任务要求我重新实现所有链表函数。我很难理解解构主义者做了什么,或者它的代码是什么。我写了一个代码来解构主义列表,但我认为这是不对的(见下文)。我还觉得我需要在许多LinkedList函数中调用解构器。有人能向我解释一下,并给我一个解构主义代码的想法吗?
~list()
{
for(int i=0; i<length; i++)
{
pop_front();
}
delete head;
}
除非您的代码可见,否则无法提出确切的解决方案。如果您正在使用手写的链表,则需要解除分配所有动态分配的链表节点。您也可以使用std::list
。
不应显式调用"析构函数",但它将作为delete
调用的一部分进行调用。破坏0结尾链接列表的一种方法如下(示例伪代码):
class node {
int data;
node *next;
public:
~node()
{
delete this->next; // this will be chained until NULL is found
}
};
class list {
node *head;
...
public:
~list()
{
delete head;
}
};
然后调用
由于没有对所有列表节点执行delete
,因此内存泄漏。一个典型的实现可能是这样的:
For each node in the list
delete node;
Clear the entire list;
此外,
我也觉得我需要称之为解构者在许多LinkedList函数中
不,您不应该从任何函数显式调用析构函数。当对象超出范围或有人列出您的delete
时,它会自动调用。这完全取决于使用list
类的代码。但是,请注意,在erase
等函数中,您可能希望从列表中删除单个节点,但这并不意味着您必须调用列表的析构函数。
相关文章:
- 反向给定链表中的K节点
- 如果没有malloc,链表实现将失败
- 文本文件中的单词链表
- 努力将整数转换为链表。不知道我在这里做错了什么
- 链表,反向函数,数据结构
- 使用std::list创建循环链表
- 链表的泛型函数remove()与成员函数remove)
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 我们可以删除链表中静态内存中的节点吗
- C++,指针数组,指向双链表中的条目
- 链表中写入访问冲突的未知原因
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- 打印所有链表的元素 (C++)
- 错误:需要类名(链表c++)
- 为什么C中的通用链表中存储的数据已损坏
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 链表c++插入,所有情况都已检查,但没有任何工作
- 链表,将列表复制到另一个列表
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 对单向链表进行排序时出现运行时错误