0

我在函数中有一个异步 lambda。我将如何保留捕获变量。

伪代码:

void hello()
{
    std::string hi( "This is hello" );

    doSomethingThenCallThisLambda([&]
    {
        std::cout << hi;
    });
}

上面的代码似乎会导致内存错误,但我不知道为什么。

4

1 回答 1

1

hi内存错误可能是由于超出范围时被破坏的事实。我不知道它是如何doSomethingThenCallThisLambda工作的,但我猜它实际上并没有直接调用它的参数,而是将它存储在某个地方,以便在hello返回后调用。

您可以使用 shared_ptr (注意更改为按值传递):

auto hi = std::make_shared<std::string>("This is hello");

doSomethingThenCallThisLambda([=]
{
    std::cout << *hi;
});
于 2013-10-09T21:41:43.357 回答