繁体   English   中英

将shared_ptr传递给lambda时的C ++内存管理

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM