То есть вместо
resource r = init;
...
if (err)
goto cleanup;
...
cleanup:
free(r);
пишется
resource r = init;
auto resouce_free_guard = scope_guard([&]{ free(r); });
if (err)
return;
Во-первых, код начинал писаться во времена С++03. Лямбд не было ещё, а мне уже досталось много в наследство.
Во-вторых, код там был в Си-стиле, потому что были плану по переписыванию всего на чистый Си.
В третьих, я уже смутно помню зачем и почему там было всё так, как было. Вопрос лишь был - видел ли я такой код и да я видел) Вопрос зачем - другой вопрос.