循環依賴說,我們有:使用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,但我無法理解如何正確使用它們來解決這種情況。任何人都可以幫助解決這個例子?
謝謝!
您正在尋找解決方案的問題是什麼?我的例子中沒有看到任何錯誤。是的,三個對象都是相互引用的 - 這是一個問題,因爲......? – 2014-08-30 03:58:24
有一個循環依賴...正如我在我的評論下面提到的。 A - > Lambda,Lambda - > B,B - > A.這意味着A或B不能被破壞。我怎樣才能解決這個循環依賴? – minibigboss 2014-08-30 04:00:47
僅僅持有一個引用或指向一個對象的指針並不會神奇地阻止後者被銷燬。 C++不是Java。 – 2014-08-30 04:04:38