【问题标题】:boost weak_ptr_cast in shared_from_this()在 shared_from_this() 中提升 weak_ptr_cast
【发布时间】:2009-01-19 22:20:24
【问题描述】:

我正在使用 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 异常?

【问题讨论】:

    标签: c++ boost


    【解决方案1】:

    如果你在堆栈上声明了 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,这将再次尝试返回尚不存在的共享指针。

    【讨论】:

    • 从构造函数调用shared_from_this() 可能是shared_from_this() 失败的原因(我的意思是在开发时,当然不是在生产代码中)。不幸的是,最好的(唯一的?)解决方案似乎是使用两阶段构造(有所有缺点)。
    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多