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

Jay*_*Jay 5 c++ stack-overflow recursion memory-management smart-pointers

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

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

Fle*_*exo 5

假设我理解你是对的,head并且next都是智能指针,你可以通过以下方式避免这种情况:

head = head->next;
Run Code Online (Sandbox Code Playgroud)

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

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

  • 是的,所以你可以用`while(head)head = head-> next;`非递归地删除整个列表 (3认同)