【发布时间】:2019-04-09 10:21:52
【问题描述】:
在使用
的链表中struct Node {
T value;
Node* next;
}
对于每个使用的 new 运算符(new Node()),必须有一个 delete 运算符。
此类列表的析构函数示例
~LinkedList(){
Node* tmp = head;
while(tmp! = nullptr){
delete tmp;
tmp = tmp->next;
}
}
我的问题是,究竟是什么被“删除”,让我可以使用 next 指针 即使在使用 delete 之后?它只删除值吗?它在记忆中的实际表现如何?
【问题讨论】:
-
delete 伴随着一个动作。链表中前一个元素的下一个元素现在指向被删除元素之后的元素。
-
您的代码有错误。如果你打电话给
delete tmp然后在 tmp->next 你会得到访问冲突或类似的东西 -
tmp->nextafterdelete tmp可能有时会起作用,但这是严格未定义的行为。 -
@MichaelChourdakis 不在此代码中。
-
@MichaelChourdakis
delete是不伴随着移动,你的其余评论都不会出现在这段代码中。你在说什么?
标签: c++ pointers memory-management