0

我想将(简单链接)列表转换为从链接列表派生的跳过列表。在将(链接)列表作为参数的转换 ctor 内部,我在 *. 我只是从 main 调用那个 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();
        }
    };
4

1 回答 1

2

您需要查看有关动态对象创建的基本 C++ 规则。new调用您正在创建的对象的构造函数。通过调用new object构造函数 for object,您将获得一个无限循环(实际上是无限递归),导致没有更多的堆栈空间。

于 2012-05-18T20:17:41.027 回答