在shared_from_this()中提升weak_ptr_cast

ste*_*vex 5 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();
  }
}
Run Code Online (Sandbox Code Playgroud)

为什么shared_from_this会抛出weak_ptr_cast异常?

ste*_*vex 8

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

void bar()
{
  foo fooby;
  fooby.get();
}
Run Code Online (Sandbox Code Playgroud)

foob​​y.get()会抛出weak_ptr_cast异常.

要解决这个问题,请fooby在堆上声明:

void bar()
{
  boost::shared_ptr<foo> pFooby = boost::shared_ptr<foo>(new foo());
  pFooby->get();
}
Run Code Online (Sandbox Code Playgroud)

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