简单的数据结构,例如链接列表,其中“下一个”指针是智能指针。当头节点被删除时,'next'的智能指针启动并进行递归删除。对于很长的清单,这会很快打击堆栈。
我不得不回过头来用简单的原始指针替换这些智能指针。我在这里错过了什么吗?
答案 0 :(得分:5)
假设我理解正确,head
和next
都是智能指针,你可以通过以下方式避免这种情况:
head = head->next;
或同等的。你的'旧'头将被删除,旧的第二名将被提升到头部。一致的变化,没有深度递归。唯一的先决条件是头部不是NULL
开头。
正如Mike在评论中指出的那样,如果目标是删除整个列表,那么你可以在一个循环中重复这一点。
答案 1 :(得分:2)
链接列表类内部的智能指针似乎并没有给你带来太多帮助。原始指针似乎对我来说非常合理。我认为智能指针最适合用于不太容易忘记删除内容的受控情况。
请注意,你一定是一个巨大的列表来打击堆栈,你确定你的代码中没有错误吗?