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