LINUX.ORG.RU

История изменений

Исправление dvetutnev, (текущая версия) :

А можно пример такого использования? Хоть один.

Для очистки ресурсов при альтернативном завершении функции.

auto func()
{
  A* a = createA();
  if (!a) {
    //set error
    return;
  }
  B* b = createB();
  if (!b) {
    goto clearA;
  }
  C* c = createC();
  if (!c) {
    goto clearB;
  }

  process(a, b, c);

clearC:
  releaseC(c);

clearB:
  releaseB(b);

clearA:
  releaseA(a);
}

Но это больше для Си актуально, для С++ есть RAII и деструкторы.

Исходная версия dvetutnev, :

А можно пример такого использования? Хоть один.

Для очистки ресурсов при альтернативном завершении функции.

auto func()
{
  A* a = createA();
  if (!a) {
    //set error
    return;
  }
  B* b = createB();
  if (!b) {
    goto clearA;
  }
  if (!c) {
    goto clearB;
  }

  process(a, b, c);

clearC:
  releaseC(c);

clearB:
  releaseB(b);

clearA:
  releaseA(a);
}

Но это больше для Си актуально, для С++ есть RAII и деструкторы.