是否需要删除函数中未使用的新结构?

时间:2018-06-30 14:36:33

标签: c++ memory

我正在尝试改进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()函数。

  1. 在动态内存中创建一个新节点,并将其分配给“ temp”
  2. 将temp的指针设置为现在指向头部(但是新节点发生了什么?)
  3. 将头部的后续元素设为新头部
  4. 从内存中删除温度

我认为本教程不会引入内存泄漏,但是在我看来,似乎每次调用delete_first()都会生成一个永不删除的额外结构。

好吧,既有“新”又有“删除”,但这难道不意味着内存中的元素数量保持不变?

有人可以让我澄清一下,为什么在这种情况下为什么不发生内存泄漏?

1 个答案:

答案 0 :(得分:2)

您是正确的。

这是您正在阅读的教程中的一个错误。它不应该在Phoenix.Endpoint中创建新节点。相反,应在声明时将delete_first()设置为temp