我正在使用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异常?
答案 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
,这将再次尝试返回一个尚不存在的共享指针。