вижу следующее, подскажите пожалуйста почему это работает:
TSharedPtr<TPromise<EStatusCode>> ReturnPromise = MakeShared<TPromise<EStatusCode>>();
Request->OnProcessRequestComplete().BindLambda([ReturnPromise](FHttpRequestPtr Req, FHttpResponsePtr HttpResponse, bool bSucceeded) {
ReturnPromise->EmplaceValue((EStatusCode)HttpResponse->GetResponseCode());
});
Request->ProcessRequest();
return ReturnPromise->GetFuture();
Скорее всего я просто не понимаю правильно логику, но разве ReturnPromise не уничтожиться до того как OnProcessRequestComplete лямбда будет вызвана (в случае если лямбда не успеет вызваться до того как область видимости, т.е. скоуп, где был создан ReturnPromise закончится)?
На то там и shared_ptr. Он передаётся в capture_list лямбды по значению. И будет жить
Но ведь лямбда еще не вызвана (и не известна будет ли вызвана вообще). Получается что shared ptr будет жить вечно в том случае, если предположим что лямбда никогда не будет вызвана? Извиняюсь если это очень глупый вопрос, я не понимаю просто, правда))
Лямбда же где-то будет храниться, верно?
ааа, всё... я понял
Обсуждают сегодня