У меня есть асинхронная лямбда в функции. Как я буду хранить переменную захвата.
Код Psuedo:
void hello()
{
std::string hi( "This is hello" );
doSomethingThenCallThisLambda([&]
{
std::cout << hi;
});
}
Вышеприведенный код вызывает ошибки памяти, но я не уверен, почему.
Ошибки памяти, вероятно, связаны с тем, что hi
уничтожается, когда он выходит за рамки. Я не знаю, как doSomethingThenCallThisLambda
работает, но я предполагаю, что он фактически не вызывает его параметр напрямую, а скорее хранит его где-то, чтобы вызываться после hello
возвращается.
Вы можете использовать shared_ptr (обратите внимание на изменение на значение pass-by-value):
auto hi = std::make_shared<std::string>("This is hello");
doSomethingThenCallThisLambda([=]
{
std::cout << *hi;
});