循环依赖说,我们有:使用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