由于递归删除,智能指针会打击堆栈

时间:2011-08-20 10:57:23

标签: c++ memory-management recursion stack-overflow smart-pointers

简单的数据结构,例如链接列表,其中“下一个”指针是智能指针。当头节点被删除时,'next'的智能指针启动并进行递归删除。对于很长的清单,这会很快打击堆栈。

我不得不回过头来用简单的原始指针替换这些智能指针。我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:5)

假设我理解正确,headnext都是智能指针,你可以通过以下方式避免这种情况:

head = head->next;

或同等的。你的'旧'头将被删除,旧的第二名将被提升到头部。一致的变化,没有深度递归。唯一的先决条件是头部不是NULL开头。

正如Mike在评论中指出的那样,如果目标是删除整个列表,那么你可以在一个循环中重复这一点。

答案 1 :(得分:2)

链接列表类内部的智能指针似乎并没有给你带来太多帮助。原始指针似乎对我来说非常合理。我认为智能指针最适合用于不太容易忘记删除内容的受控情况。

请注意,你一定是一个巨大的列表来打击堆栈,你确定你的代码中没有错误吗?