【发布时间】:2019-06-15 15:53:32
【问题描述】:
考虑以下代码,
std::function<void(void)> f = []() {};
std::function<void(void)>* fp = new std::function<void(void)>(f);
每当程序离开这些行的上下文时(假设它们在函数内部被调用并且函数返回)f 和fp 的内存可能会在某个时候被回收。这很好,因为我只对fp 感兴趣并且我得到了它的副本。
重点是有一个函数指针 (fp),我以后可以随时调用它。所以,只要我不delete fp,问题就是:
f 是否会被释放,导致 fp 无效?
【问题讨论】:
-
和
int x = 1; int * xp = new int(x);的情况一样。 -
另一个问题是,为什么不能将函数存储在其生命周期与其使用重叠的地方。
-
std::function已经是一个指向函数对象的智能指针。 -
@Oliv 不是这样的。如果有的话,它将函数对象作为成员。
-
@rubenvb 您可以在
std::function中保存任意大小的函数对象,因此它不能(始终)是直接成员。请记住,“智能指针”包括唯一所有权
标签: c++ c++11 memory-management lambda