1

我有以下内容:

B监听一个boost::signal2C,当触发时将执行类给定的回调A并执行类中的方法A

A,BC,D都是std::shared_ptr.

问题是当 classD释放指向 class 的指针时BB由于信号处理程序没有被删除。即使我打电话给断开连接,boost::connection我也有同样的问题。

知道如何解决吗?

4

1 回答 1

2

所以问题是由于一个shared_ptr循环。

ClassA传递给持有to class 的 class Ban ,因此永远不会删除 class 。std::functionshared_ptrAA

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

我在类中使用 lambda 函数和 weak_ptr 修复了它A

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

这样我的函数myFunc只有在 A 仍然有效时才会被调用。

于 2017-08-03T13:45:15.863 回答