微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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,这意味着删除它什么都不做,所以不要打扰。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。