C++ 从_this()提升弱_ptr_在共享_中强制转换
我正在使用boost的共享指针,并从\u this启用\u shared\u,以允许返回指向此的共享指针。代码如下所示:C++ 从_this()提升弱_ptr_在共享_中强制转换,c++,boost,C++,Boost,我正在使用boost的共享指针,并从\u this启用\u shared\u,以允许返回指向此的共享指针。代码如下所示: class foo : public boost::enable_shared_from_this<foo> { boost::shared_ptr<foo> get() { return shared_from_this(); } } class-foo:public boost::从\u中启用\u共享\u { boost::s
class foo : public boost::enable_shared_from_this<foo>
{
boost::shared_ptr<foo> get()
{
return shared_from_this();
}
}
class-foo:public boost::从\u中启用\u共享\u
{
boost::shared_ptr get()
{
从_this()返回共享的_;
}
}
为什么来自此的共享\u会引发弱\u ptr\u强制转换异常?如果在堆栈上声明了foo,那么就没有其他指向foo的共享指针。例如:
void bar()
{
foo fooby;
fooby.get();
}
get()将抛出weak\u ptr\u cast
异常
要解决此问题,请在堆上声明fooby
:
void bar()
{
boost::shared_ptr<foo> pFooby = boost::shared_ptr<foo>(new foo());
pFooby->get();
}
void bar()
{
boost::shared_ptr pFooby=boost::shared_ptr(new foo());
pFooby->get();
}
另一种可能性是,在构造函数完成之前,您试图使用
shared\u from\u this
,这将再次尝试返回一个尚不存在的共享指针。从构造函数调用shared\u from\u this()
可能是shared\u from\u this()
失败的原因(我的意思是在开发时,当然不是在生产代码中)。不幸的是,最好的(唯一的?)解决方案似乎是使用两阶段构造(尽管它有很多缺点)。