C ++ 0x中的Lambda表达式/闭包如何使C ++中的内存管理复杂化?为什么有些人说封闭在手动内存管理的语言中没有位置?他们的主张是否有效,如果是,那背后的原因是什么?
答案 0 :(得分:15)
这样的争论是一个红色的鲱鱼。是的,lambdas有内存管理问题需要处理,但lambda基本上就像一个带有成员变量的函数对象(functor)。无论仿函数必须处理什么问题,lambda也必须处理。 C ++ 0x lambdas具有决定捕获哪些对象以及是应该通过值还是通过引用来设置的工具。这类似于在函子对象中存储值和引用。
答案 1 :(得分:10)
Lambdas可以比它们创建的上下文更长。然后通过引用绑定自由变量可能是一个问题,因为当lambda想要稍后访问它们时,它们可能不再存在。它只是伪装成“不要通过引用返回局部变量”。
答案 2 :(得分:2)
C ++ 0x中的Lambda表达式/闭包如何使C ++中的内存管理复杂化?
他们呢?它们只是用于创建函数对象的语法糖。没有我们以前没见过的东西。直到现在,我们还有一个简短的语法来创建那些即时的。
为什么有些人说闭包在手动内存管理的语言中没有位置?
你应该问他们。我发现C ++ 0x lambda方法相当优雅和低级。它符合C ++的精神。
声明是否有效,如果是,那背后的原因是什么?
打败我。小心自己挖掘一些论点?