我一直在看香草萨特的CppCon 2016的谈话中,他举了一个例子around 37 minutes in,这样的事情:什么是C++中的回调地狱,为什么它会泄漏内存?
void f(shared_ptr<T> & ptr)
{
obj.on_draw([=]() { ... }
}
然后他说,
我听说它被称为回调地狱,在那里你注册一个回调和 它有一个强大的拥有者 - 它恰好是一个垃圾收集指针 但它是一个强大的拥有者 - 但你永远不会摆脱它,它的 只是永远存储在那里,现在对象将永远不会消失。
所以他说它被称为回调地狱,它会泄漏物体。 但我不太明白这段代码有什么问题,以及它为什么会泄漏。有人可以向我解释这一点吗?
我已经看过其他人在stackoverflow上的答案,但他们似乎都是关于并发。
必须谈论内存所有权。由于C中没有垃圾收集器,所以很难知道何时/谁必须释放分配的对象。不过,'unique_ptr'可以提供帮助。 –
如果它是公开的,请链接谈话。无论是否,请说出幻灯片#或演示文稿中的什么时间。 –
@RawN:这不是无关紧要的,它只是没有足够的了解萨特博士所说的话,任何人都可以回答,而无需去查找和观看整个演讲。 –