Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> исключения, тактика их использования 
:(
    Опции темы
FooBar
Дата 27.4.2009, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 25.2.2008

Репутация: нет
Всего: 3



здравствуйте, у меня есть вопрос, как работают с исключениями в реальных приложениях? я себе представляю это так как изложил ниже, чем может быть плох такой подход? как лучше?
Код

int main()
{
    try
    {
        //инициализация, работа
    }
    catch(std::bad_alloc &) // типа не хватило памяти
    {
        cout << "ошибка..." << endl;
        return 1;
    }
    catch(...)
    {
        cout << "ошибка..." << endl;
        return 1;
    }
    // и так далее

    return 0;
}

PM MAIL   Вверх
Acer
Дата 27.4.2009, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



Используйте исключения в необходимых для этого случаях. Например:
выделение памяти(большого обьема)
Код

try {
 ... = new char[0xffffffff];
} catch ( ... ) { /* не хватило оперативки*/ }

доступ к элементам массива неизвестной длинны и т.п.
Не вижу смысла всю программу строить на блоках try - catch.
PM MAIL   Вверх
FooBar
Дата 27.4.2009, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 25.2.2008

Репутация: нет
Всего: 3



Acer, ну а в случае когда дальнейшая работа невозможна/не имеет смысла, то как добраться до main (return'нами как то долго) чтобы завершить приложение? или же в этом случае использовать exit? так он (exit) вроде как не совсем идеологически верен в плюсах?
PM MAIL   Вверх
Acer
Дата 27.4.2009, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



Чего долго?
Код

class Work {
public:
    Work(){}
    virtual ~Work(){}
public:
    bool run(){
        char *buf;
        try {
            buf = new char[10];
            //....
            delete[] buf;
        } catch( ... ) { return false; }
        return true;
    }
};

int main(int argc, char *argv[]){
    Work w;
    if ( !w.run() ) return -1;
    return EXIT_SUCCESS;
}

Так же и с наследованием и использованием в, например, классе Work обьекты еще какого-то класса.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0921 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.