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在堆上分配新的Node后是否应该删除它,因为它可能会导致内存泄漏或者无关紧要。

解决方法

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

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

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

,

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