C ++ shared_ptr std :: bind和std :: function

时间:2017-08-01 14:40:29

标签: c++ shared-ptr std-function boost-signals2

我有以下内容:

B侦听类boost::signal2的{​​{1}},触发后将执行类C给出的回调,并执行类{{1}中的方法}

AAAB都是C

问题是当类D释放指向类std::shared_ptr的指针时,由于信号处理程序,D没有被删除。即使我在B上呼叫断开连接,我也有同样的问题。

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

所以问题是由shared_ptr周期引起的。

班级A传递给班级Bstd::function,其中shared_ptr为班级A,因此班级A永远不会删除。

例如。 B.route(std::bind(&A::myFunc, shared_from_this()));

我用类A中的lambda函数和weak_ptr修复它:

std::weak_ptr<A> wp = shared_from_this();
  A.route(std::bind([wp]() {
   auto p = wp.lock();
   if(wp)
     wp->myFunc();
}));

这样我的函数myFunc仅在A仍然有效的情况下被调用。