我有以下内容:
类B
监听一个boost::signal2
类C
,当触发时将执行类给定的回调A
并执行类中的方法A
A
,B
和C
,D
都是std::shared_ptr
.
问题是当 classD
释放指向 class 的指针时B
,B
由于信号处理程序没有被删除。即使我打电话给断开连接,boost::connection
我也有同样的问题。
知道如何解决吗?
我有以下内容:
类B
监听一个boost::signal2
类C
,当触发时将执行类给定的回调A
并执行类中的方法A
A
,B
和C
,D
都是std::shared_ptr
.
问题是当 classD
释放指向 class 的指针时B
,B
由于信号处理程序没有被删除。即使我打电话给断开连接,boost::connection
我也有同样的问题。
知道如何解决吗?
所以问题是由于一个shared_ptr
循环。
ClassA
传递给持有to class 的 class B
an ,因此永远不会删除 class 。std::function
shared_ptr
A
A
例如。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 仍然有效时才会被调用。