在shared_from_this()中提升weak_ptr_cast

时间:2009-01-19 22:20:24

标签: c++ boost

我正在使用boost的共享指针,enable_shared_from_this启用返回共享指针。代码如下所示:

class foo : public boost::enable_shared_from_this<foo>
{
  boost::shared_ptr<foo> get()
  {
    return shared_from_this();
  }
}

为什么shared_from_this会抛出weak_ptr_cast异常?

1 个答案:

答案 0 :(得分:8)

如果你在堆栈上声明了foo,那么就没有其他的foo共享指针。例如:

void bar()
{
  foo fooby;
  fooby.get();
}

fooby.get()会抛出weak_ptr_cast异常。

要解决此问题,请在堆上声明fooby

void bar()
{
  boost::shared_ptr<foo> pFooby = boost::shared_ptr<foo>(new foo());
  pFooby->get();
}

另一种可能性是你在构造函数完成之前尝试使用shared_from_this,这将再次尝试返回一个尚不存在的共享指针。