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之后,应该删除temp吗,因为这可能会导致内存泄漏或无关紧要。

迈克猫

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

还要注意,delete temp;您的代码中的毫无意义(没有收获,没有伤害),因为在此之前temp设置为NULL,并且delete NULL;定义为不执行任何操作。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章