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



我正在实现一个LinkedList。我可以重用我编写的一个公共函数来删除和释放析构函数中的节点(内存(吗。输出结果很好/正确,但我想知道我是否遗漏了幕后的任何内容。我已经看到了这一点,但我主要关心的是,在释放C++代码中的内存方面,我做得是否正确。

我的析构函数:

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

我的公共函数DeleteEndVal((;:

// delete value from the end of the list
int DeleteEndVal(){
if(CheckListEmpty() == true){
cout << "Empty list. Nothing to delete." << endl;
return -1;
}
else{
int val;
Node *prev;
Node *cur;
if(head->next == NULL){
val = tail->data;
head = NULL;
tail = NULL; 
}
else{
prev = head;
cur = head->next;
while (cur->next != NULL){
prev = prev->next;
cur = cur->next;
val = cur->data;
}
prev->next = NULL;
free(cur);
}
return val;
}
}

您可以在析构函数中调用函数,所以首先要回答您最初的问题:是的,没关系。

不过还有其他几个方面:

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

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

  • 在析构函数中有一个Node *next = head;。IMHO,它没有任何作用
  • 您似乎具有tail属性。如果该方法是删除tail元素(可能将其重命名为DeleteTail(,则不应该遍历整个链表。相反,取尾部,获取其上一个元素(我假设您的链表是双向的(,然后更新该链接
  • 因此,您当前的实现有一个嵌套的while循环来销毁列表,时间顺序为n*n。对于销毁用例,您甚至不需要更新元素,只需使用一个简单的while循环,就可以在不重新链接的情况下销毁它们

相关内容

  • 没有找到相关文章