这是我的测试代码:
#include <iostream>
#include <cstdlib>
using namespace std;
class List
{
private:
class Node{
public:
int data;
Node* next;
public:
virtual ~Node()
{
if (next != NULL)
{
cout << "Node is out: " << data << endl;
delete next;
}
}
Node()
{
next = NULL;
}
};
Node* head;
public:
virtual ~List()
{
if (head != NULL)
{
delete head;
}
}
List()
{
head = NULL;
}
public:
void AddNode(int data);
void DeleteNode(int data);
//....
};
void List::AddNode(int data)
{
Node* temp = new Node;
temp -> data = data;
if (head == NULL)
{
head = temp;
}
else
{
Node* ptr = head;
while (ptr -> next != NULL)
{
ptr = ptr -> next;
}
ptr -> next = temp;
}
}
int main()
{
List test_list;
test_list.AddNode(1);
test_list.AddNode(2);
test_list.AddNode(3);
test_list.AddNode(4);
test_list.AddNode(5);
return 0;
}
输出如下:
Node is out: 1
Node is out: 2
Node is out: 3
Node is out: 4
这是一个常见的列表,你可以注意Node和List的两个析构函数。我认为这个可以工作,但out表明最后一个节点无法删除。我还测试其他数量的节点。结果相同,最后一个节点无法删除。非常感谢您的建议: - )。
答案 0 :(得分:3)
将析构函数更改为在if
语句外部打印。
析构函数 被调用,但是,在您的上一个节点next
上是NULL
,因此if
语句返回false
并且cout line没有被调用。
virtual ~Node()
{
cout << "Node is out: " << data << endl;
if (next != NULL)
{
delete next;
}
}