Рассмотрим следующее:
unique_ptr<int> foo = make_unique<int>(42);
auto lambda = [bar = move(foo)]()
{
/* Do something with bar */
};
lambda(); // No issues invoking this
cout << "*foo = " << *foo; //Attempts to dereference foo will segfault
Для захвата таких вещей, как unique_ptr, необходимо использовать std :: move, чтобы поддерживать уникальность unique_ptr. Но что делать, если я хочу использовать тот же умный указатель после разрушения лямбды? Использование foo даст segfault, и bar выходит за рамки этого.
Возможно, неортодоксальное использование лямбды, как мне вернуть мой unique_ptr? Это застряло в лямбде навсегда?