下面的代码是创建一个B链,由方法f遍历。
如下所示,代码不起作用。每次遍历只深入一层。
我知道chain应该只返回一个shared_ptr,但我的问题是为什么这不起作用?
#include <iostream>
#include <boost/shared_ptr.hpp>
class B
{
public:
B()
{
}
B(const B& b)
{
}
B& chain()
{
b = boost::shared_ptr<B>(new B());
return *b;
}
void f()
{
std::cout << this << " " << bool(b) << std::endl;
if (b)
return b->f();
return;
}
boost::shared_ptr<B> b;
};
int main()
{
B b0;
B b1 = b0.chain();
B b2 = b1.chain();
b0.f();
b1.f();
b2.f();
}