我正在尝试了解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;
}
答案 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)
{
}