0

完了時にラムダを渡して実行したい未来がありますが、ラムダが実行されるまでにスコープが変更されます。取得した値はどうなりますか? 例えば

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

  return isFinished;
}

ラムダが実際に実行されるまでに、関数は終了している可能性があります。それで何が起こるでしょうか?一連の変数をバインドするのと同じように、値でキャプチャしていますか?

4

2 に答える 2

1

ラムダはisFinishedポインターを値でキャプチャし、ポインターが指すオブジェクトはフリーストアにあります。それで大丈夫です。ラムダで参照されているローカル オブジェクトはありません。

于 2013-11-16T01:04:07.113 に答える