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

C++ shared_ptr std::bind and std::function

我有以下内容:

class B 监听 class Cboost::signal2 并且当被触发时将执行 class A 并执行 class A

中的方法

ABCD都是std::shared_ptr.

问题是当class D 释放指向class B 的指针时,由于信号处理程序,B 没有被删除。即使我在 boost::connection 上调用断开连接,我也会遇到同样的问题。

知道如何解决这个问题吗?

所以问题是由于 shared_ptr 循环。

Class A 传递给 class B 一个 std::function 持有一个 shared_ptr 到 class A,所以 class A 从未被删除。

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

我在 class 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 仍然有效时才会被调用。