【发布时间】:2014-06-05 16:45:08
【问题描述】:
我有一个名为“节点”的类。我将一堆节点对象链接在一起形成一个链表。当调用“节点”析构函数时,它只删除第一个节点。如何遍历整个节点链表并删除每个节点对象?
这是类定义:
class Node
{
private:
double coeff;
int exponent;
Node *next;
public:
Node(double c, int e, Node *nodeobjectPtr)
{
coeff = c;
exponent = e;
next = nodeobjectPtr;
}
~Node()
{
printf("Node Destroyed");
}
通过在指向链接节点列表的第一个节点的指针上调用 delete 来调用析构函数。
【问题讨论】:
-
如果您只有几个节点,只需执行
delete next- 它会递归地破坏节点。如果你有几百或几千个,创建一个LinkedList对象并在其中迭代地删除它们,否则你会出现堆栈溢出。 -
“如果你只有几个节点” - 你怎么知道?如果有太多,你刚刚炸毁了堆栈。在 C++ 中,无限递归总是一个坏主意。
-
让链表删除它需要删除的节点,不给节点类这个责任。
delete next建议只会将 OP 画在角落里。如果稍后,所有需要删除的只是列表中的单个节点怎么办?delete next将是灾难性的。
标签: c++ class linked-list destructor