我必须删除lambdas吗?

use*_*072 21 c++ lambda destructor function-pointers c++11

我在动态分配的对象中存储指向lambdas的指针:

struct Function {
    SomeType*(*func)(int);
    Function(SomeType*(*new_func)(int)):
        func(new_func) {}
}

Function* myf = new Function(
    [](int x){ return doSomething(x); }
);

delete myf;
Run Code Online (Sandbox Code Playgroud)

我是否必须在此类的析构函数中编写特殊内容?

krz*_*zaq 13

不,你不需要做任何特别的事情.在这种情况下(您将lambda转换为函数指针),告诉您不需要删除它也没有什么不同doSomething.

更一般地,lambdas是具有已删除的默认构造函数的未命名类型.这意味着您只能通过复制/移动构建它来显式创建一个具有新表达式的表达式 - 然后您才需要调用它delete.

N4140§5.1.2[expr.prim.lambda]/20

lambda表达式关联的闭包类型具有已删除的默认构造函数和已删除的复制赋值运算符.