[英]C++ memory management when passing shared_ptr to lambda
考虑以下C ++代码:
void f(std::function<void()> func) {
func();
}
void g(std::shared_ptr<MyObject> myObjPtr) {
myObjPtr->someMethod();
}
void h(std::shared_ptr<MyObject> myObjPtr) {
f([=](){ g(myObjPtr); });
}
是否有内存泄漏?
我的理解是myObjPtr
已复制到lamba中,并且其引用计数增加了。 然后将其复制到g()
,在此引用计数再次增加。 g()
完成后, shared_ptr
引用计数减小。 然后,在f()
执行func()
之后, shared_ptr
引用计数再次减小。 所以我认为这段代码使引用计数保持平衡(两个增量和两个减量)。 但是,我对shared_ptr
和lambdas还是比较陌生,因此我的理解可能不正确。
您的理解是正确的。
另外,如果复制了lambda对象(可能是将其包装在std::function<void()>
),那么这也会增加引用计数(并在销毁副本时将其减少)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.