Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
#1

try, catch, throw - C++

07.12.2012, 03:34. Просмотров 791. Ответов 5
Метки нет (Все метки)

пишу класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
namespace mystd
{
 
    const uint32_t def_size = 1 << 20; //default memory container
 
    template<typename T>
    class vector
    {
    public:
 
        vector() : size(def_size)
        {
            head = presnt = tail = (T*)NULL;
        }
        
        int push_back(T data)
        {
            T *tmp = new T;
            
            try
            {
                tmp->next = NULL;
            }
            catch () //<<<----------------------??????????????????
            {
                
            }
            
            if (head == NULL)
            {
                head = presnt = tail = tmp;
            }
                
        }
        
    private:
        uint32_t size;
        T *head;
        T *presnt;
        T *tail;
    };
}
Что мне ловить в catch? как работает throw?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 03:34     try, catch, throw
Посмотрите здесь:

Try Throw Catch пример - C++
Как-то не особо много инфы нарыл по данной теме... Может у кого есть какие уже реализованные примеры?

Try,catch,throw,OVERFLOW! - C++
Добрый вечер! И СНОВА с вами try..catch...:p Я очень долго пытался понять try-catch сам, читал везде, где только можно(ссылки давать...

try, throw, catch...обработка исключений - C++
помогите разобраться с обработкой исключений...при вводе пароля больше 10 символов должна быть непредвиденная ошибка, пытаюсь ее поймать,но...

Try throw catch в решении уравнения - C++
Есть уравнение y=1/sqrt(x-3). нужно считать x, пусть он будет целым. а затем с помощью исключений обработать ошибки: 1) ввели...

C++ try catch throw в разных функциях - C++
try и catch находятся в одной функции а throw вызывается из другой. ну MVS выкидывает исключение вместо передачи управления. что делать?...

Try - catch - throw для чего они - C++
Есть код программы принимающей температуру и заводит в вектор, она еще не доработана, Страуструп пишет что защиту от ошибок можно сделать с...

try catch throw для чего нужны? - C++
Для чего нужны эти операторы? Линканите пожалуйста статью, где доходчиво объяснено их применение, в разных вариантах (например я видел...

Посоветуйте пособие по использованию конструкции try/catch/throw - C++
Не могли бы вы посоветовать мне книжку/статью/пособие, где доходчиво бы объяснялось о том, как использовать try/catch/throw? В частности,...

Объясните пожалуйста, как работать с try catch и throw - C++
как следует работать с try catch и throw. никак не могу понять как применить их в программе

Throw() - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; void handler(double test) throw() { if (sizeof(double) ==...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
07.12.2012, 04:38     try, catch, throw #2
Смотря какая ошибка.
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <stdexcept>
 
int divide( int a, int b ) {
   if ( a == 0 )
      throw std::runtime_error( "Exception occurred: Division by zero." );
 
   return a / b;
}
 
int main() {
   int result;
 
   try {
      result = divide( 10, 2 );
 
      std::cout << result << std::endl;
   } catch ( std::runtime_error &error ) {
      std::cout << error.what() << std::endl;
   }
 
   try {
      result = divide( 10, 0 );
 
      std::cout << result << std::endl;
   } catch ( std::runtime_error &error ) {
      std::cout << error.what() << std::endl;
   }
 
   return 0;
}
Можно так же кидать исключения прям в try блоке. В catch обрабатывается тип исключения ( в общем случае - это объект класса ), который указывается в скобках. Для обработки всех возможных исключений используется многоточие
C++
1
catch ( ... )
Но в данном случае нельзя получить доступ к объекту класса исключения. Если catch блоков несколько, то выбирается первых подходящий. То есть если выбрасывается объект какого то производного класса ( например тот же std::runtime_error, который является производным от std::exception ), а первый в обработчиках идет объект базового класса ( например std::exception ), то будет выбран именно он.
пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <exception>
#include <stdexcept>
 
int div( int a, int b ) {
   if ( b == 0 )
      throw std::runtime_error( "Exception occurred: Division by zero." );
 
   return a / b;
}
 
int main() {
   int result;
 
   try {
      result = div( 10, 0 );
 
      std::cout << result << std::endl;
   } catch ( std::exception &error ) {
      std::cout << "std::exception: " << error.what() << std::endl;
   } catch ( std::runtime_error &error ) {
      std::cout << "std::runtime_error: " << error.what() << std::endl;
   }
 
   return 0;
}
Если подходящего обработчика не обнаружено, то исключение пробрасывается дальше вниз по стеку, пока необходимый обработчик не будет найден, или не будет достигнуто начало стека, в это случае приложение аварийно завершится. В принципе, можно бросать любые типы в качестве исключения, например, тот же int или double. И обрабатывать их соответствующими обработчиками ( catch ( int err ), catch ( double err ) ), но сомневаюсь, что это хорошая идея.
activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
07.12.2012, 05:02  [ТС]     try, catch, throw #3
а где есть список всехз доступных исключений? Какие пункты и в какой редакции стандарта?

Добавлено через 2 минуты
я так понимаю throw это тоже что и return + печать сообщения, если оно есть ?
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
07.12.2012, 05:07     try, catch, throw #4
activnaya, бросаются всего лишь объекты. Это не какая то сложная система. Вы можете создать свой класс исключения, например MyException, тогда при записи
C++
1
throw MyException();
будет создан безымянный объект класса MyException, и который можно будет поймать обработчиком
C++
1
catch( MyException &object )
В стандарте есть несколько классов исключений. Каждый из них является производным от класса std::exception.

Добавлено через 1 минуту
Цитата Сообщение от activnaya Посмотреть сообщение
я так понимаю throw это тоже что и return + печать сообщения, если оно есть ?
Необязательно печать, Вы можете делать все необходимые действия в блоке catch выброшенного исключения. И нет, это не тоже самое, что и return.

Все операторы идущие после выброса исключения пропускаются. То есть например в моем примере
C++
1
result = div( 10, 0 );
Переменной result не будет ничего присвоено, так как функция div выбросила исключение. Так же не будет выполнятся идущая далее строка
C++
1
 std::cout << result << std::endl;
gray_fox
What a waste!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 3
07.12.2012, 06:03     try, catch, throw #5
Цитата Сообщение от activnaya Посмотреть сообщение
а где есть список всехз доступных исключений?
Выбросить можно любое значение, например:
C++
1
2
3
4
5
try {
   throw "fail";
} catch (char const* str) {
   std::cerr << str << std::endl;
}
Правда выбрасывать что-либо, не унаследованное от std::exception всё же не стоит)
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
09.12.2012, 18:53     try, catch, throw #6
Цитата Сообщение от activnaya Посмотреть сообщение
я так понимаю throw это тоже что и return + печать сообщения, если оно есть ?
Нет, он просто бросает исключение? Или вы об отдельно стоящем throw в блоке catch? Тогда происходит просто проброска исключения. Ловить все равно будем на более высоком уровне, например для защиты ресурсов, т. е. иммитация try - finaly
Yandex
Объявления
09.12.2012, 18:53     try, catch, throw
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru