使用std :: weak_ptr解决lambda中的循环依赖

时间:2014-08-30 03:53:14

标签: c++ c++11 lambda

说我们有:

class A
{
    void Func(std::function<void(void)> handler);
}

class B
{
    A myObj;

    B()
    {
        myObj.Func([this]()
        {
            //whatever
        });
    }
}

这使得myObj(类型A)具有对lambda对象的引用,lambda对象引用了B对象(通过捕获'this'),而B对象(捕获'this')引用了myObj(类型A) ),这意味着发生了循环依赖,对吗?

我知道解决方案在于以某种方式使用std :: weak_ptr,但我无法理解如何正确使用它们来解决这种情况。任何人都可以为这个例子提供解决方案吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

即使存在循环依赖关系,也会删除所有内容,因为简单引用不会阻止删除任何内容。它们就像你在谈论的弱点一样。