如何解决递归变量

时间:2017-02-16 18:32:40

标签: c++ boost

我正在尝试了解boost::recursive_wrapper的工作原理,并编写了以下测试代码。 我认为使用指针足以解决递归问题。 但是,以下代码编译但在尝试创建'a'时出现运行时错误。知道它失败的原因以及boost::recursive_wrapper如何运作。

template<class T>
class w
{
public:
    w();
private:
    T *p;
};

template <class T>
w<T>::w():p(new T)
{

}

struct list
{
    int val;
    //boost::recursive_wrapper<list> Next;
    w<list> Next;

};    

void main()
{
    list a;
}

1 个答案:

答案 0 :(得分:2)

构造函数中的p(new T)部分将导致无限的运行时递归。

该行

list a;

呼叫

list::list()

调用

w<list>::w() : p (new list)

调用

list::list()

并且直到堆栈溢出发生才会递归。

改为使用p(nullptr)

template <class T>
w<T>::w() : p(nullptr)
{
}