我想将一个(简单链接的(列表转换为一个从链表派生的skiplist。在转换 ctor 中,它得到一个(链接(列表作为参数,我在 * 处得到一个堆栈溢出。我只是从主要调用一次 ctor。怎么可能循环调用新的 SkipList?
class SkipList : public List {
public:
SkipList(SkipListEl* first) : List (first){};
SkipList(const List& sl){
ListEl* fst = sl.getFirst();
new SkipList(fst); // * <- stackoverflow
while(fst->hasNext()){
new SkipListEl(*fst);
fst = fst->getNext();
}
};
您需要
查看有关动态对象创建的基本C++规则。 new
调用要创建的对象的构造函数。通过在构造函数中调用new object
for object
,你会得到一个无限循环(实际上是无限递归(,导致不再有堆栈空间。