匿名函数在内存中是持久的,还是按值传递

时间:2015-06-21 20:48:56

标签: c++ anonymous-function

在C ++中我们做这样的事情:

void a_function(void (*function_name)(char *data))
{
    char *data = new char[1];
    function_name(data);
}

a_function([](char *data) {
    //do sth
});

我猜function_name是一个指向函数的指针。但是当我传递一个匿名函数时,是否在传递之前为此函数分配了一个空间?

如果我没有传递匿名函数但确实传递了现有函数的地址,那么它与上面的代码片段是否相同呢?

1 个答案:

答案 0 :(得分:2)

实际上,只要编译器无法证明没有人调用它,无状态lambda就有一个存在的函数。此函数在编译时存储在可执行文件中,并在运行时加载。除非是dll左右的格式(或其他类似的东西),否则只要程序有效,它就会存在。

理论上,有一些有效的函数指针在调用时会运行一个函数。从无状态lambda获得的指针是一个有效的函数指针,当它被创建的lambda被销毁时它不会变为无效。