﻿# V829\. Lifetime of the heap\-allocated variable is limited to the current function's scope\. Consider allocating it on the stack instead\.

Это диагностическое правило основано на пункте R\.5 CppCoreGuidelines \(Prefer scoped objects, don't heap\-allocate unnecessarily\)\.

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

Пример:

```cpp
class Object { .... };
void DoSomething()
{
  auto obj = new Object;
  ....
  delete obj;
}
```

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

Исправленный пример:

```cpp
void DoSomething()
{
  Object obj;
  ....
}
```

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

```cpp
void DoSomething(Object** ppObj)
{
  auto obj = new Object;
  if (obj->good())
  {
    *ppObj = obj;
    return;
  }
  delete obj;
}
```