链表的析构函数方法
Destructor method for a linked list?
假设我想为链表函数实现一个析构函数:
class LinkedList {
public:
LinkedList(int value, LinkedList* next);
~LinkedList();
int value();
LinkedList* next();
private:
int value;
LinkedList* next;
}
我的第一个想法是这样的:
LinkedList::~LinkedList {
LinkedList* first = this;
while (first != null) {
LinkedList* temp = first->next;
delete first;
first = temp;
}
}
这显然是行不通的,因为我们有一个 delete this
调用,它递归地永远调用自己。但我不确定如何解决这个问题。我的下一个想法是这样的:
LinkedList::~LinkedList() {
delete next;
}
但我不确定这是否真的做了什么,因为它只是递归地调用 next
的 delete 方法,直到最终以 NULL
结束。我将如何为链接列表的实现实现析构函数方法?
LinkedList::~LinkedList()
{
delete next;
}
应该工作。如果你有一个列表,如:A -> B -> C -> D
和删除A
(这是你的头(,A
的析构函数将删除并调用B
的析构函数,这将删除并调用C
的析构函数,依此类推。 D
的析构函数有next = nullptr
,所以删除不做任何事情。
但是,如果列表很长,并且析构函数不是编译器优化的尾部调用,则可能会遇到堆栈溢出。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- C++:使用方法调用析构函数的顺序是什么?
- 在析构函数中删除单链表的正确方法是什么?
- 哪种方法更适合处理虚拟析构函数?
- 显式调用 typedef'd 类类型的析构函数的正式正确方法
- C++ std::线程调用方法,从对象原因到调用此类的析构函数
- 链表的析构函数方法
- 从C++中的虚拟析构函数调用虚拟方法
- 是在 C 或 C++ 析构函数中模拟 GO 语言 defer 的实用方法
- 这是删除析构函数中的数组的正确方法吗?
- 在其赋值运算符方法中调用对象的析构函数
- 抛出可由C++98和C++1x编译的析构函数.有更好的方法吗
- C++虚拟析构函数导致调用基方法
- 类具有虚拟方法,但具有非虚拟析构函数C++
- 从析构函数停止线程的正确方法
- 从基类析构函数调用派生类方法
- Qt:写这个类的析构函数的正确和安全的方法是什么
- 我可以从析构函数的类方法调用它吗
- 如何通过析构函数方法删除对象(类)
- 是否有某种方法可以检测是否使用非虚拟基析构函数错误地删除了类