@hauptling

Как кидать исключения при работе с try catch?

Как правильнее работать с исключениями при выделении динамической памяти?

вот так?
void foo() {
    int *smth = new int[100];
    try {
        if (5 < 4) {
            std::runtime_error("Беда");
        }
    //тут работа с массивом smth
    } catch (std::runtime_error &e) {
        e.what();
    }
    delete[] smth;
}


вопрос в том можно ли как-то правильно выделить память внутри try и потом удалить без утечки памяти?

еще вопрос про С-ный FILE

Если создать

FILE *file;

fclose(file)
где нужно вставлять fclose(file) при использовании тех же try catch
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
@res2001
Developer, ex-admin
Сишные функции не вызывают исключений. В Си их просто нет. Поэтому помещать их в try/catch нет смысла - проверяйте возвращаемые значения по старинке. Если хотите, можете написать обертки для стандартных функций, генерирующие исключения в случае ошибки. А еще лучше использовать std::fstream - вы же пишите на С++, так и пользуйтесь плюсовой стандартной библиотекой, а не Сишной.
void foo() {
    int *smth;
    try {
        smth = new int[100];
        if (5 < 4) {
            std::runtime_error("Беда");
        }
    } catch (std::runtime_error &e) {
        e.what();
    }
    delete[] smth;
}

new генерирует std::bad_alloc, если произойдет исключение - память не выделилась и ничего удалять не надо.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы