“[](int* p){delete p;}”的意思是什么?(涉及IT技术)

3
3个回答

9

这是一个无捕获Lambda表达式,它接收一个指向int的指针,并调用delete。另外,这里有另一个微软开发者网络的链接,解释了Lambda的语法。


6

这表示一个类似于C++11的lambda表达式(“lambda函数”)。它接收一个指向整数的指针并将其delete掉。


严格来说,这不是一个闭包。闭包意味着它捕获了封闭变量,而lambda函数没有。但这只是纠缠不清的问题,+1。 - Billy ONeal
@BillyONeal 谢谢,我不知道那个。已经修复了。(我不是 C++ 的人,或许在回答 C++ 的问题之前应该先学习 C++,哈哈。) - user529758
那不是C++的事情。那只是一个简单的“λ演算”问题。但我跑题了 :) - Billy ONeal
在这种情况下,我应该在回答任何问题或试图反驳某人的微小差别之前,学习一些更一般的计算机科学、数学等知识。 :D - user529758
我们是C++程序员。我们是一群极度追求完美的人!(:P)比尔,冲啊~ - Billy ONeal

4

这类似于

void foo(int* p){
   delete p;
}

但是可以作为另一个函数的一部分内联编写(例如作为回调函数传递)。

在boost shared_ptr中,我不能将foo作为“deleter”传递,我必须创建一个重载了operator()的类。在C++11中是否有所不同? - gregory561
是的,如上所述,这是C++11中新增的语法。Boost受现有编译器能力的限制。 - tletnes
2
等等,什么?&foo在boost::shared_ptr<int>(new int(7), &foo)中不是有效的删除器吗?boost::shared_ptr的文档暗示删除器类型必须是可复制构造的(void()(int)也是如此),并且d(t)不能抛出异常(同样正确)。或者在boost的眼中,原始类型不符合“可复制构造”的条件吗? - Yakk - Adam Nevraumont

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接