# 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).

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

Пример:

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

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

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

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

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

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