提问者:小点点

C++双链表,动态分配节点后要删除节点吗?


 void addEnd(T data) {
    if (head == NULL) {
      Node<T> *temp = new Node<T>(data);
      head = temp;
      tail = temp;
      temp = NULL;
      delete temp;
      ++size;
    } else {
      Node<T> *temp = new Node<T>(data);
      tail->LinkToNext(temp);
      temp->LinkToPrev(tail);
      tail = temp;
      temp = NULL;
      delete temp;
      ++size;
    }
  }

在上面的加数函数中,我是否应该在使用temp在堆上分配新节点之后删除它,因为它可能导致内存泄漏,或者这无关紧要。


共2个答案

匿名用户

两者都不应删除仍在使用的节点。变量指向您刚才分配的节点,因此您不应该删除它。

但同样,一旦它不再被使用,您也应该删除它,否则您就会出现内存泄漏。

匿名用户

您决不能删除函数中新创建的节点,因为稍后将使用它。当丢弃列表时,应该删除节点。(可能在析构函数和/或类似函数中)。

还要注意,代码中的没有意义(没有好处,没有坏处),因为在此之前被设置为,而被定义为什么也不做。

变量本身通常在堆栈上分配,并在从函数返回时自动删除,因此您不需要显式删除它。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|双|链表|动态分配|节点|删除|节点)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?