Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从_this()提升弱_ptr_在共享_中强制转换_C++_Boost - Fatal编程技术网

C++ 从_this()提升弱_ptr_在共享_中强制转换

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

我正在使用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::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()
失败的原因(我的意思是在开发时,当然不是在生产代码中)。不幸的是,最好的(唯一的?)解决方案似乎是使用两阶段构造(尽管它有很多缺点)。