2014-08-30 89 views
0

循环依赖说,我们有:使用std ::的weak_ptr解决拉姆达

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

class B 
{ 
    A myObj; 

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

这使得MyObj中(A型的)具有与拉姆达对象的引用,拉姆达对象具有参照B对象(通过捕获'this')和B对象(捕获'this')引用myObj(类型A),这意味着发生了循环依赖关系,对吧?

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

谢谢!

+0

您正在寻找解决方案的问题是什么?我的例子中没有看到任何错误。是的,三个对象都是相互引用的 - 这是一个问题,因为......? – 2014-08-30 03:58:24

+0

有一个循环依赖...正如我在我的评论下面提到的。 A - > Lambda,Lambda - > B,B - > A.这意味着A或B不能被破坏。我怎样才能解决这个循环依赖? – minibigboss 2014-08-30 04:00:47

+1

仅仅持有一个引用或指向一个对象的指针并不会神奇地阻止后者被销毁。 C++不是Java。 – 2014-08-30 04:04:38

回答

0

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

+0

如果他们是AddRefed? – minibigboss 2014-08-30 05:12:14

+0

我的意思是他们只指向某些东西。说引用类似于普通的C指针会更正确。我希望这个链接将帮助你http://stackoverflow.com/questions/57483/what-are-the-differences-between-a-pointer-variable-and-a-reference-variable-in – justanothercoder 2014-08-30 05:33:37

+0

有没有任何情况下循环依赖可能是一个问题?难道这不就是弱点吗? – minibigboss 2014-08-30 06:05:52