我可以在析构函数中调用公共函数来释放内存吗?

时间:2018-11-25 22:35:44

标签: c++ memory linked-list destructor singly-linked-list

我正在实现一个LinkedList。除了重做工作,我可以重用我编写的公共函数来删除和释放析构函数中的节点(也包括内存)。输出结果很好/正确,但是我想知道我是否在幕后遗漏了任何东西。我见过this,但是我主要担心的是我是否在释放C ++代码中的内存方面做得正确。

我的破坏者:

<div class="content">
  <div draggable="true" class="drag box">Drag</div>
  <div class="drop box"></div>
  <div class="pixel"></div>
</div>

我的公共函数DeleteEndVal();:

~LinkedList(){
    Node *next = head;
    while(head != NULL){
        DeleteEndVal();
    }
}

1 个答案:

答案 0 :(得分:2)

您可以在析构函数中调用函数,因此首先回答您的原始问题:是的,没关系。

不过还有其他几个方面:

首先,您不应该手工重新编码基本概念,例如链表。这是容易出错的和/或可能是效率低下的实现。请改用基础类或标准C ++库。

坚持代码时,我想知道为什么:

  • 析构函数中有一个Node *next = head;。恕我直言,它什么也没做。
  • 您似乎具有tail属性。如果该方法正在删除tail元素(也许将其重命名为DeleteTail),那么您不应该遍历整个链表。取而代之的是,获取尾部的位置,获取其前一个元素(我假设您的链接列表是双向的),然后更新该链接。
  • 因此,
  • 您当前的实现有一个嵌套的while循环来破坏列表,时间顺序为n * n。对于销毁用例,您甚至不需要更新元素,使用简单的while循环并销毁它们而无需重新链接。