Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 解构链表_C++_List_Linked List - Fatal编程技术网

C++ 解构链表

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您

我正在做一项作业,要求我重新实现所有链表函数。我在理解解构器的功能或代码方面遇到了一些困难。我写了一段代码来解构这个列表,但我认为这是不对的(见下文)。我还觉得我需要在许多LinkedList函数中调用解构器。有人能给我解释一下,让我知道解构器的代码是什么样子的吗

 ~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
类的定义。此外,正确的术语是解构函数而不是解构函数。