Sun*_*day 5 c++ lambda reference-counting pass-by-value shared-ptr
考虑以下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); });
}
Run Code Online (Sandbox Code Playgroud)
是否有内存泄漏?
我的理解被myObjPtr复制到了lamba中,并增加了其引用计数。然后将其复制到g()参考计数再次增加的位置。当g()完成后,shared_ptr有递减引用计数。然后,后func()在执行f()中shared_ptr有引用计数再次递减。所以我认为这段代码使引用计数保持平衡(两个增量和两个减量)。但是,我对shared_ptrlambda并不陌生,因此我的理解可能不正确。
| 归档时间: |
|
| 查看次数: |
2731 次 |
| 最近记录: |