﻿# V1047\. Lifetime of the lambda is greater than lifetime of the local variable captured by reference\.

Анализатор обнаружил подозрительный захват переменной в лямбда функции\.

Рассмотрим варианты срабатывания диагностики:

Пример 1:

```cpp
function lambda;
{
  auto obj = dummy<int>{ 42 };
  lambda = [&obj]() { .... };
}
```

Переменную, которая будет уничтожена при выходе из блока, захватывают по ссылке\. Время жизни лямбда функции при этом превышает время жизни объекта\. Это приведет к использованию ссылки на уничтоженный объект при вызове лямбда функции\.

Вероятно, объект нужно захватить по значению:

```cpp
function lambda;
{
  auto obj = dummy<int>{ 42 };
  lambda = [obj]() { .... };
}
```

Пример 2:

```cpp
function lambda;
{
  auto obj1 = dummy<int>{ 42 };
  auto obj2 = dummy<int>{ 42 };
  lambda = [&]() { .... };
}
```

В этом случае диагностика определит, что обе переменные захвачены по ссылке и выдаст предупреждение на каждую из них\.

Также возможно, что функция возвращает лямбду, захватившую локальную переменную по ссылке\.

Пример 3:

```cpp
auto obj = dummy<int>{ 42 };
return [&obj]() { .... };
```

В этом случае вызывающий код получит из функции лямбду, вызов которой приведет к использованию невалидной ссылки\.