【发布时间】:2010-01-18 15:57:04
【问题描述】:
我创建了一个包含链表的类,并且该类需要具有用于删除链表的析构函数,但是我已将其包含在内,因为删除方法本身调用了析构函数,我最终陷入无限递归调用情况。
这里是代码:-
PolynomialNode::~PolynomialNode()
{
/*PolynomialNode* current_node_ptr = link;
PolynomialNode* header_ptr = link;
int index = 0;
if( link != NULL)
{
while( current_node_ptr != NULL)
{
index++;
current_node_ptr = current_node_ptr->get_link();
}
delete_nodes( &header_ptr, 0, index);
} */
PolynomialNode* current_node_ptr = link;
PolynomialNode* copy_ptr;
while( current_node_ptr != NULL)
{
copy_ptr = current_node_ptr->get_link();
current_node_ptr->set_link(NULL);
delete current_node_ptr;
current_node_ptr = copy_ptr;
}
}
请注意,我通过递归调用尝试了此操作 - 有意删除链接列表,但我仍然遇到同样的问题。
任何帮助将不胜感激。
注意:我知道这是一个递归调用,因为当我单步调试调试器时,我可以看到它正在发生。
【问题讨论】:
-
我不明白这将如何产生无限递归 - 只要
set_link照它说的做,每个递归析构函数调用都应该返回而不进一步递归。 -
当您尝试删除指向链表的指针时,即在删除命令之后,会发生递归调用 - 不,我认为这也不会以递归方式结束,但是当我使用调试器时可以清楚地看到它的发生。
-
另外因为我已经设置了current_node_ptr来链接所以没有删除这个。
标签: c++