删除运算符
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
以免出现悬挂指针。
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
以免出现悬挂指针。