C++ shared_ptr std::bind 和 std::function
C++ shared_ptr std::bind and std::function
我有以下内容:
class B
监听 class C
的 boost::signal2
并且当被触发时将执行 class A
并执行 class A
中的方法
A
、B
和C
、D
都是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 仍然有效时才会被调用。
我有以下内容:
class B
监听 class C
的 boost::signal2
并且当被触发时将执行 class A
并执行 class A
A
、B
和C
、D
都是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
:
std::weak_ptr<A> wp = shared_from_this();
A.route(std::bind([wp]() {
auto p = wp.lock();
if(wp)
wp->myFunc();
}));
这样我的函数 myFunc
只有在 A 仍然有效时才会被调用。