簡體   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