嘿,我想知道 我写了一个 C++ 链表,我在其中调用析构函数来遍历分配的链表并删除找到的每个节点。然而我发现,尽管它遍历链表并删除每一次出现,它仍然会打印出值。尽管只是一些报废值(value)。
但是,当我删除 linked_list 时,它不应该在下次打印吗?
我使用 new
创建一个链接列表,当我删除列表时使用 delete
sorted_list::~sorted_list()
{
// Destructor implementation
destroy(this->first);
cout << "Destructor called sorted_list" << endl;
}
void sorted_list::destroy(list_link* item)
{
if (item)
{
destroy(item->next);
delete item;
}
}
打印函数
void sorted_list::print() {
if(this->first)
{
iteratorn *traverse = new iteratorn(this->first);
while( !traverse->iterator_end() )
{
cout << traverse->iterator_get_key() << " ";
traverse->iterator_next();
}
delete traverse;
}
else
cout << "list empty" << endl;
}
最佳答案
当你访问一个被破坏的对象时,行为是未定义的。事实上,删除一个对象并不会清除内存,只是将其标记为可用,所以如果你对已经删除的对象执行一些操作,它们可能会做一些合理的事情。但同样,该对象已被破坏,因此您不能访问它。
当然,在链表被析构后,你不应该保留任何指向属于链表的对象的指针,因为这些对象也会被析构。
顺便说一下,您的 sorted_list::destroy
是递归的,效率很低。您可能需要用迭代方法替换它:
void sorted_list::destroy(list_link* item)
{
while (item)
{
list_link* old = item;
item = item->next;
delete old;
}
}
(你应该考虑@Roger Pate 的评论,不要在调用 destroy(this->first);
后第二次删除 this->first
。)
关于c++ - 删除链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4112905/