Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Использование __try __finaly


Автор: alnight 11.1.2017, 21:03
Здравствуйте.
Подскажите, как возможно использовать конструкцию __try, __finaly для освобождения ресурсов в одном месте.
Пример:
Код

int err;
int *a = (int *)malloc(4);
if (err = my_function() == 0)
{
    free(a);
    return 1;
}
int *b = (int *)malloc(4);
if (err = my_function() == 0)
{
    free(a);
    free(b);
    return 1;
}

...

int *z = (int *)malloc(4);
if (err = my_function() == 0)
{
    free(a);
    free(b);
    ...
    free(z);
    return 1;
}
...    // полезный код, что-то выводим
free(a);
free(b);
...
free(z);
return 0;


Как можно использовать освобождение памяти в одном месте с помощью конструкции _try...__finaly? Код, конечно, искусственный, но часто приходится сделить за всеми освобождениями по мере возникновения ситуаций исключения.
Тут речь не о контроле ошибок, а о том, чтобы не следить каждый раз за тем, какие именно free() надо писать в каждом случае, а вместо этого запихнуть их все в финальный блок __finaly.

Автор: xvr 16.1.2017, 23:47
Для этого обычно используют классы с деструкторами и С++ конечно. __finaly это весьма нестандартное расширение языка

Автор: azesmcar 19.1.2017, 15:04
у меня очень много вопросов возникло.
Если это C++, то почему malloc/free а не new/delete? Если это C, то зачем нужен try-finally? Исключений в C нету, что собственно ловить?

Цитата(alnight @  11.1.2017,  21:03 Найти цитируемый пост)
Тут речь не о контроле ошибок, а о том, чтобы не следить каждый раз за тем, какие именно free() 

goto?

Добавлено через 40 секунд
ну а в C++ конечно же http://en.cppreference.com/w/cpp/language/raii.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)