繁体   English   中英

我必须删除lambdas吗?

[英]Do I have to delete lambdas?

我在动态分配的对象中存储指向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;

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

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

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

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

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

如果不知道你的课程应该做什么,就不可能告诉你它的析构函数应该或不应该做什么。

如果类直接分配动态内存(使用newmalloc [不使用malloc ]),那么您将不得不考虑如何释放该内存。 同样,如果类获取其他资源(如文件指针),则必须考虑如何释放这些资源。 通常,这样做的适当位置是析构函数。

问问自己:该类是直接分配任何动态内存还是获取外部资源? 答案似乎是:不,它没有。 因此,似乎没有任何特别的东西应该在析构函数的主体中明确地完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM