删除运算符

Delete operator

void createnode(int data)
{
    node *temp=new node;
    temp->data=data;
    if(head==null)
    {
        head=temp;
        tail=temp;
        temp=null;
    }
    else
    {
        tail->next=temp;
        temp=null;
    }
}

我应该立即删除临时文件吗? 我将使用另一个函数来删除每个节点。够了吗?

首先,temp是空的,所以删除它是一个空操作。

如果您问是否应该删除此函数中 new node 的结果,答案是 "no, you should not"。如果这样做,列表将保留悬挂指针。正确的方法是在从列表中删除节点时删除节点,在删除列表本身时等。

您需要阅读一些关于指针和内存的基本内容。

delete用于从内存中删除一些东西。在这种情况下,这是存储节点内容的堆变量。很明显,就是在删除节点的时候才做。

temp设置为nullptr后,它不再代表(/指向)任何内存。对其调用 delete 是没有意义的。 (这在技术上是无害的,但代码中有无用的行仍然不好。)

我建议您阅读什么是栈和堆,以及为什么堆需要 new 和 delete 而栈不需要。这可能会为您解决问题。

Should I delete temp right now? I'll be using another function to delete every node.

没有

如您的函数名称所示,它是 createNode()(读作 create 节点)。

此功能的重点是通过创建和链接节点构建您的列表
删除它们.

仅当列表被破坏或您想从列表中删除(或删除)节点时才删除。

注意:

temp 重命名为 "newNode" 并且不要将其设置为 null 以免出现悬挂指针。