嘿,我想知道我写了一个C++链表,在那里我调用析构函数来遍历已分配的链表并删除找到的每个节点.然而,我发现虽然它通过链表并删除每个出现它仍然会打印出值.虽然只是一些废料价值.
但是当我删除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;
}
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
Vla*_*lad 14
访问被破坏的对象时,行为未定义.实际上,删除对象并不会清除内存,只是将其标记为可用,因此如果对已经删除的对象执行某些操作,它们可能会做一些合理的操作.但同样,该对象被破坏,因此您不能访问它.
当然,在破坏链接列表后,不应该保留任何指向链接列表的对象,因为这些对象也会被破坏.
顺便说一句,你sorted_list::destroy
是递归的,这是非常低效的.您可能需要用迭代方法替换它:
void sorted_list::destroy(list_link* item)
{
while (item)
{
list_link* old = item;
item = item->next;
delete old;
}
}
Run Code Online (Sandbox Code Playgroud)
(你应该考虑@Roger Pate的评论而不是this->first
在打电话后第二次删除destroy(this->first);
.)