【发布时间】:2011-08-30 06:54:58
【问题描述】:
假设,我有一个单链表,它的基本构建块是,
struct Node {
Data d;
Node *pNext;
// methods
~Node();
};
链表的头部存储为,
Node *m_Head; // member of some class
当我完成列表时,我将通过删除每个节点来清理它,
void Erase()
{
Node *pIter, *pTemp = m_Head;
while((pIter = pTemp) != 0)
{
pTemp = pIter->pNext;
delete pIter;
pIter = pTemp;
}
}
我想,如果我可以简化这个。所以我想出了一个想法,只需一条指令就可以清理整个链表!
delete m_Head;
析构函数看起来像:
Node::~Node() { delete this->pNext; }
我担心的是,它会导致递归(隐含由于delete)吗?如果是,那么对于更大的链表来说绝对是一个问题。编译器能以任何方式帮助优化吗?
[注意:不使用任何库设施,如 std::list 或其他。]
【问题讨论】:
-
注意,如果选择了后面的【使用删除】,在删除前要设置
node->pNext = NULL;【修改列表时,不要销毁】,否则会失去这个的尾巴子列表。
标签: c++ recursion linked-list memory-management