【问题标题】:C++ Double Linked List, should I delete the nodes after dynamically allocating them?C ++双链表,我应该在动态分配节点后删除它们吗?
【发布时间】:2021-04-03 13:26:03
【问题描述】:
 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-management memory-leaks linked-list


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    你删除的不是变量,而是内存。在您上面的代码中,tempNULL,这意味着删除它什么也不做,所以不要打扰。

    【讨论】:

      猜你喜欢
      • 2015-04-15
      • 1970-01-01
      • 2011-03-12
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多