【发布时间】:2016-06-02 19:08:19
【问题描述】:
我已经转换了以下链表结构
struct node {
node* next;
int v;
};
进入 c++11 版本 - 不使用指针。
struct node {
unique_ptr<node> next;
int v;
};
添加、删除元素和遍历工作正常,但是当我插入大约 100 万个元素时,调用头节点的析构函数时会出现堆栈溢出。
我不确定自己做错了什么。
{
node n;
... add 10mill elements
} <-- crash here
【问题讨论】:
-
... add 10mill elements在堆栈中??请提供minimal reproducible example。 -
@HappyKoding 想一想这将如何运作。要删除第一个节点,首先需要删除第二个节点,所以调用一个函数。但要做到这一点,您首先需要删除第三个节点。所以你调用一个函数。您将拥有数百万级别的函数调用。您需要一种特定的方式来解开该链表,如果您不编写代码来执行此操作,它将不会自行编写。
-
@zenith 它不能那样做。它不知道该对象是链表的一部分,因此需要一种特殊的算法来使销毁变得合理。它只是为对象运行默认析构函数,它将为指向的对象运行默认析构函数,依此类推。对于这个特定问题,这是一个疯狂的算法。
-
@zenith 从性能的角度来看,这不仅是疯狂的,而且从“我可以合理地期望它在实际计算机上工作”的角度来看也是疯狂的。而且,事实上,它没有用。
标签: c++ c++11 linked-list stack-overflow unique-ptr