Лямбда - это объект, и вы можете хранить его так, как считаете нужным. Вы должны убедиться в том, что время жизни любых ссылок или указателей на них хранится.
Если вы перехватываете копию (=
), вы всегда в безопасности. В вашем примере вы захватываете указатель this
, что также хорошо, если объект переживет ваш unique_ptr (в данном случае это глобальный объект).
Обратите внимание, что ввод локальных указателей является ошибкойили ссылки указателем / ссылкой, потому что они выпадают из области видимости и становятся недействительными, даже если объект, на который они указывают, переживает:
auto ref = this;
auto lambda = [&] () { this->… }; // ok if parent object outlives lambda
auto lambda = [&] () { ref->… }; // wrong! leads to invalid pointer