C++双链表,动态分配后是否应该删除节点?

C++ Double Linked List, should I delete the nodes after dynamically allocating them?

 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,因为它可能会导致内存泄漏或者没有关系。

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

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

另请注意,您代码中的 delete temp; 是无意义的(没有好处,没有坏处),因为在此之前 temp 设置为 NULL 并且定义了 delete NULL;什么都不做。

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