首页 > 解决方案 > 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;
    }
  }

在上面的 addEnd 函数中,我应该在使用它在堆上分配新节点后删除 temp,因为它可能会导致内存泄漏或者没关系。

标签: c++memory-managementmemory-leakslinked-list

解决方案


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

另请注意,delete temp;您的代码中的 没有意义(没有收获,没有伤害),因为在此之前temp设置为NULL并且delete NULL;被定义为什么都不做。

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


推荐阅读