我可以运行存储的lambda,其捕获的值不再在范围内吗?

时间:2013-11-16 00:57:02

标签: c++ lambda c++-amp

我有一个未来,我希望传递一个lambda在它完成时运行,但范围将在lambda执行时改变;捕获的值会发生什么?例如

bool* MakeThen(Concurrency::completion_future& future)
{
  bool * isFinished = new bool(false);
  future.then([=](){ *isFinished = true; });

  return isFinished;
}

当lambda实际执行时,函数可能已经完成。那会发生什么?是否像绑定一堆变量那样按值捕获?

2 个答案:

答案 0 :(得分:1)

您的lambda按值捕获isFinished指针,它指向的对象位于免费商店。所以没关系。 lambda中没有引用本地对象。

答案 1 :(得分:0)

只要您还没有完成delete isFinished;,它都是安全的。