首页 > 解决方案 > 如果我使用 std::function 捕获 lambda,我应该担心它被释放吗?

问题描述

考虑以下代码,

std::function<void(void)> f = []() {};
std::function<void(void)>* fp = new std::function<void(void)>(f);

每当程序离开这些行的上下文时(假设它们在函数内部被调用并且函数返回)f并且fp's 的内存可能会在某个时候被回收。这很好,因为我只对它感兴趣fp并且我得到了它的副本。

关键是有一个函数指针 ( fp),我以后可以随时调用它。所以,只要我不这样做delete fp,问题就是:

是否会f被解除分配,导致fp无效?

标签: c++c++11memory-managementlambda

解决方案


该声明:

std::function<void(void)>* fp = new std::function<void(void)>(f);

调用复制构造函数function(std::function<void ()> const&)f存储在 . 指向的内存中fp

所以fp除非被删除,否则不会失效。

正如评论中所指出的,它与用于初始化另一个使用new. 局部变量的寿命不会影响指针变量的后续使用,除非指针本身被删除。


推荐阅读