【问题标题】:Why can't I use shared_from_this with a callbacks interface object?为什么我不能将 shared_from_this 与回调接口对象一起使用?
【发布时间】:2011-12-16 01:33:37
【问题描述】:

当我尝试将 shared_from_this() 从继承自回调接口的派生类传递到第三个类时,我遇到了一个糟糕的 weak_ptr 异常,该类在构造函数中采用回调基类 shared_ptr。为什么这不起作用?请参阅下面的简化测试用例:

#include <boost/tr1/memory.hpp>

class MyCallbacks : public std::tr1::enable_shared_from_this<MyCallbacks>
{
public:
  virtual ~MyCallbacks() {}
  virtual void callback1() = 0;
};

class Worker
{
public:
  Worker(std::tr1::shared_ptr<MyCallbacks> cb) : callbacks(cb) {}

  void do_work() { if (callbacks) callbacks->callback1(); }

private:
  std::tr1::shared_ptr<MyCallbacks> callbacks;

};

class Boss : public MyCallbacks
{
public:
  Boss() : worker(shared_from_this()) {}

  void go()
  {
    std::cerr << "Calling worker->do_work" << std::endl;
    worker.do_work();
  }

  void callback1()
  {
    std::cerr << "callback1" << std::endl;
  }

private:
  Worker worker;
};

int main (int argc, char const *argv[])
{
  std::tr1::shared_ptr<Boss> boss(new Boss);
  boss->go();
  return 0;
}

【问题讨论】:

    标签: c++ boost shared-ptr smart-pointers


    【解决方案1】:

    无法在构造函数中调用shared_from_this(),因为必须首先存在至少一个shared_ptr see the Requires statement at the bottom of this page

    【讨论】:

      猜你喜欢
      • 2016-03-09
      • 1970-01-01
      • 2013-08-15
      • 2011-01-26
      • 2020-08-26
      • 2013-07-02
      • 2015-11-08
      • 2013-08-24
      相关资源
      最近更新 更多