使用删除没有逻辑

dep*_*oul 0 c++ linked-list delete-operator

我有一个小代码片段用于删除链表中的元素.这是代码:

if (head->data ==  num) {
    delete head;
    head = head->next;
}
Run Code Online (Sandbox Code Playgroud)

你可以向我解释一下为什么这段代码有效.它删除头部并将头部设置为下一个元素.

当我看到这个时,我认为这不起作用,但它有效.

Luc*_*ore 7

这是未定义的行为,所以任何事情都可能发生,包括出现在工作中.

当您调用delete时,您将内存释放回操作系统.无法保证删除或清除任何内容.因此记忆可以保持与之前相同delete,但这只是偶然的.访问它会导致未定义的行为.

一个适当的方法是:

if (head->data ==  num) {
    aux = head;
    head = head->next;
    delete aux;
}
Run Code Online (Sandbox Code Playgroud)

  • @rajatkhanduja是的,如果通过良好的编码实践你的意思是有效的代码... (2认同)
  • @rajatkhanduja,不,这不仅仅是编码练习,在你的问题评论中真的考虑阅读Eric Lippert的答案. (2认同)