J'ai créé une classe qui inclut une liste chaînée et cette classe doit avoir un destructeur pour supprimer la liste chaînée, que j'ai inclus cependant parce que la méthode delete elle-même appelle le destructeur que je trouve dans un situation d'appel récursive infinie.appel récursif involontaire dans destructeur
Voici le code: -
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;
}
}
Remarque J'ai essayé cela avec un appel récursif - intentionnel pour la suppression de la liste, et j'ai toujours le même problème.
Toute aide serait grandement appréciée. NB: Je sais que c'est un appel récursif car lorsque je parcours le débogueur, je peux le voir se produire.
connexes: http://stackoverflow.com/questions/1861912/should-delete-this-be-called-from-within-a -member-method – jldupont
Je ne vois pas comment cela donnera une récursion infinie - comme 'set_link' fait ce qu'il dit, chaque appel destructeur récursif devrait retourner sans plus de récursivité. –
L'appel resursive se produit lorsque vous essayez de supprimer un pointeur vers une liste liée, c'est-à-dire après la commande delete. Non, je ne pensais pas que cela finirait par être récursif mais quand j'utilise le débogueur, vous pouvez le voir. – hairyyak