考虑以下代码,
std::function<void(void)> f = []() {};
std::function<void(void)>* fp = new std::function<void(void)>(f);
每当程序离开这些行的上下文时(例如,它们在函数内部被调用并且函数返回),f
和fp
的内存可能会在某个时候被回收。很好,因为我只对fp
感兴趣,并且得到了它的副本。
关键是要有一个函数指针(fp
),以后我可以随时调用它。因此,只要我不delete fp
,问题就是:
f
会被释放,从而fp
无效吗?
答案 0 :(得分:4)
声明:
std::function<void(void)>* fp = new std::function<void(void)>(f);
调用复制构造函数function(std::function<void ()> const&)
,f
存储在fp
指向的内存中。
因此fp
除非被删除,否则不会失效。
如注释中所指出的,它与在使用new
分配内存的另一个变量的初始化中使用的任何其他局部变量相同。除非删除指针本身,否则局部变量的寿命不会影响指针变量的后续使用。