Я новичок в C ++ и работаю над существующей кодовой базой, и пытаюсь выяснить, как передать уникальный указатель r-значения ref в лямбду и правильно передать владение.
В настоящее время мы have:
void MyClass::onResponse(uniq_ptr<Foo>&& response) {
parent_.doSomething(std::move(response));
}
Мне нужно изменить это, чтобы сделать некоторые вещи (в основном, таймер) в основном потоке, используя функцию postToMainThread
, которая принимает лямбду, а затем вызывает doSomething
, как раньше , Публикация в главном потоке с фиктивным ответом работает нормально, но когда я пытаюсь пропустить / переместить лямбду, я получаю segfault, поскольку что-то на другой стороне пытается получить ответ:
void MyClass::onResponse(uniq_ptr<Foo>&& response) {
postToMainThread([this, &response]() {
// Do some stuff that must be on main thread
parent_.doSomething(std::response);
}
}
Я видел несколько примеров, в которых используется postToMainThread([this, response = std::move(response)]() {...
, но это не компилируется из-за конструктора копирования при ошибке уникального указателя. Я понимаю, что мне нужно передать право собственности на ответ, но я не знаю, как.