我正在尝试改进C ++,所以我决定重新开始并学习了一些教程。
为了避免出现内存泄漏的风险,似乎每个人都必须在每个“新”操作之后都进行“删除”,这是一条普遍的规则。
然后,我在关于链接列表的tutorial上偶然发现了以下代码段:
struct node {
int data;
node* next;
};
class linkedlist {
private:
node* head;
node* tail;
public:
linkedlist(){
head = null;
tail = null;
}
void delete_first()
{
node *temp=new node;
temp=head;
head=head->next;
delete temp;
}
// additional functions for add/delete/display, ...
}
我在这里遇到的问题是完全了解delete_first()函数。
我认为本教程不会引入内存泄漏,但是在我看来,似乎每次调用delete_first()都会生成一个永不删除的额外结构。
好吧,既有“新”又有“删除”,但这难道不意味着内存中的元素数量保持不变?
有人可以让我澄清一下,为什么在这种情况下为什么不发生内存泄漏?
答案 0 :(得分:2)
您是正确的。
这是您正在阅读的教程中的一个错误。它不应该在Phoenix.Endpoint
中创建新节点。相反,应在声明时将delete_first()
设置为temp
。