C++ 解构链表
我正在做一项作业,要求我重新实现所有链表函数。我在理解解构器的功能或代码方面遇到了一些困难。我写了一段代码来解构这个列表,但我认为这是不对的(见下文)。我还觉得我需要在许多LinkedList函数中调用解构器。有人能给我解释一下,让我知道解构器的代码是什么样子的吗C++ 解构链表,c++,list,linked-list,C++,List,Linked List,我正在做一项作业,要求我重新实现所有链表函数。我在理解解构器的功能或代码方面遇到了一些困难。我写了一段代码来解构这个列表,但我认为这是不对的(见下文)。我还觉得我需要在许多LinkedList函数中调用解构器。有人能给我解释一下,让我知道解构器的代码是什么样子的吗 ~list() { for(int i=0; i<length; i++) { pop_front(); } delete head; } ~list() { 对于(int i=0;i您
~list()
{
for(int i=0; i<length; i++)
{
pop_front();
}
delete head;
}
~list()
{
对于(int i=0;i您有内存泄漏,因为您没有对所有列表节点执行delete
。典型的实现可能如下所示:
For each node in the list
delete node;
Clear the entire list;
而且
我还觉得我需要称之为解构主义者
在许多LinkedList函数中
不,您不应该从任何函数显式调用析构函数。当对象超出范围或有人对您的列表执行delete
操作时,会自动调用析构函数。这完全取决于使用list
类的代码。但是,请注意,您可能需要从在函数(如erase
)中列出,但这并不意味着您必须调用list的析构函数。由于您没有对所有列表节点执行delete
,因此存在内存泄漏。典型的实现可能如下所示:
For each node in the list
delete node;
Clear the entire list;
而且
我还觉得我需要称之为解构主义者
在许多LinkedList函数中
不,您不应该从任何函数显式调用析构函数。当对象超出范围或有人对您的列表执行delete
操作时,会自动调用析构函数。这完全取决于使用list
类的代码。但是,请注意,您可能需要从在函数(如erase
)中列出,但这并不意味着您必须调用列表的析构函数。除非您的代码可见,否则无法建议确切的解决方案。如果您使用手写链表,则需要取消分配所有动态分配的链表节点。您还可以使用std::list
不应显式调用“析构函数”,但它将作为delete
调用的一部分调用。析构函数0结束链接列表的一种方法如下(示例伪代码):
然后调用,,除非您的代码可见,否则无法建议确切的解决方案。如果您使用手写链表,则需要取消分配所有动态分配的链表节点。您也可以使用std::list
不应显式调用“析构函数”,但它将作为delete
调用的一部分调用。析构函数0结束链接列表的一种方法如下(示例伪代码):
然后调用,您需要显示list
类的定义。此外,正确的术语是析构函数而不是解构函数。您需要显示list
类的定义。此外,正确的术语是解构函数而不是解构函数。