【发布时间】:2011-03-05 23:18:26
【问题描述】:
问题很简单:当我编写 lambda 表达式时,C++ 编译器自动为我生成的函子对象的生命周期是多少?
我进行了快速搜索,但找不到满意的答案。特别是,如果我将 lambda 传递到某个地方,它在那里被记住,然后我超出范围,那么一旦我的 lambda 被稍后调用并尝试访问我的堆栈分配但不再活动的捕获变量,将会发生什么?或者编译器是否以某种方式阻止了这种情况?还是什么?
【问题讨论】:
-
我猜你要么得到垃圾或 segfualt?
-
好的,所以答案是“只是不这样做”?这个想法确实发生在我身上,但是......不要做什么?不记得函数指针?或者不将函数指针传递给函数? (这就是重点,不是吗?)或者根本不使用 lambda?换句话说,lambda 的预期用途是什么?我的意思是,除了在每个示例中一遍又一遍地编写的 STL 聚合/迭代函数调用中使用它们。