Держите переменную вокруг для асинхронного лямбда

0

У меня есть асинхронная лямбда в функции. Как я буду хранить переменную захвата.

Код Psuedo:

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

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

Вышеприведенный код вызывает ошибки памяти, но я не уверен, почему.

Теги:

1 ответ

1
Лучший ответ

Ошибки памяти, вероятно, связаны с тем, что hi уничтожается, когда он выходит за рамки. Я не знаю, как doSomethingThenCallThisLambda работает, но я предполагаю, что он фактически не вызывает его параметр напрямую, а скорее хранит его где-то, чтобы вызываться после hello возвращается.

Вы можете использовать shared_ptr (обратите внимание на изменение на значение pass-by-value):

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

doSomethingThenCallThisLambda([=]
{
    std::cout << *hi;
});
  • 0
    Есть ли где-нибудь, что объясняет, как работают эти shared_pointers? и да, все, что делает эта функция, это делает что-то асинхронно, и как только она выполнена, вызывается лямбда, которая в этот момент действительно выходит из области видимости.
  • 0
    Если вы имеете в виду внутреннюю работу, это совсем не просто. Если вы имеете в виду, как их использовать, в Интернете есть множество материалов; просто Google shared_ptr или std :: shared_ptr.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню