2014-08-30 80 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