包含节点析构函数的列表
List with nodes destructor
在问我的问题之前,我知道这个问题和这个问题。
我有一个链式列表,其中每个节点都指向下一个节点。基本上:
class List{
class Node{
Node():next_(NULL){}
~Node(){
if(next_){
delete next_;
next_ = NULL;
}
}
Node* next_;
}
List():head_(NULL),tail_(NULL){}
void add_node(){
tail_->next_ = new Node();
tail_ = tail_->next_;
}
Node* head_;
Node* tail_;
}
我删除了所有无用的信息,但上面给出的代码段是足以得到这个想法(至少我希望,我会根据要求更新它)。
我关心的是破坏部分。 假设我有一个List
添加了许多带有add_node()
节点。调用List
析构函数时,它递归调用每个Node
的析构函数,直到它到达最后一个节点其中有next_==NULL
.因此,List
从末端被破坏。
我从来没有遇到过任何问题,直到今天我有一个列表~180000 个元素(内存占用量很大,但绝对不是压倒性的RAM)返回一个段错误...
如果我做一个while循环破坏最后一个元素(没有递归调用析构函数)一切正常。
析构函数的递归调用数量是否有限制?我错过了吗别的东西?
这样可以避免递归:
~Node(){
while(next_)
{
Node* temp = next_->next_;
next_->next_ = NULL;
delete next_;
next_ = temp;
}
}
相关文章:
- 什么时候调用组成单元对象的析构函数
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 内联映射初始化的动态atexit析构函数崩溃
- 什么时候调用析构函数
- 优先顺序:智能指针和类析构函数
- C++-明确何时以及如何调用析构函数
- 使用基类指针创建对象时,缺少派生类析构函数
- 在c++中使用向量时,如何调用构造函数和析构函数
- 重载运算符new[]的行为取决于析构函数
- 递归列表:调用析构函数的所有内容
- 两个单链列表共享同一个节点和析构函数两次删除相同的内存
- C++ 中列表类的析构函数
- 指向其值的双链接列表的析构函数
- 如何从Base析构函数中将Base*与Derived*列表进行匹配
- C++ 链接列表队列实现和析构函数错误:"Aborted (Core Dumped)"
- 如何使用指针C++将类的析构函数转换为另一个类?类似于单向列表容器类和节点类
- 析构函数问题 + 列表显示
- QList析构函数行为-对列表中的指针调用delete/free()
- 当返回一个用带括号的init列表初始化的对象时,我保证有一对构造函数和析构函数调用吗?
- 包含节点析构函数的列表