我有一个小代码片段用于删除链接列表中的元素。 这是代码:
if (head->data == num) {
delete head;
head = head->next;
}
请您解释一下为什么这段代码有效。它会删除头部并将头部设置为下一个元素。
当我看到这个时,我认为这不起作用,但它有效。
答案 0 :(得分:7)
这是未定义的行为,所以任何事情都可能发生,包括出现在工作中。
当您调用delete时,您将内存释放回操作系统。无法保证删除或清除任何内容。所以内存可以保持与delete
之前相同,但这只是偶然的。访问它会导致未定义的行为。
适当的方法是:
if (head->data == num) {
aux = head;
head = head->next;
delete aux;
}
答案 1 :(得分:2)
操作系统可以推迟内存段的无效。你发现删除微小的内存部分并不健壮,你只能使用一个内存段,所以删除它一次会更有效。
答案 2 :(得分:0)
从存储器中删除或释放数据并不是完全可取的。有时它可能有效,但行为未定义。