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

Когда и где следует использовать механизм исключительных ситуаций? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Чем отличаются объявления const char* и const* char http://www.cyberforum.ru/cpp-beginners/thread1236908.html
Прошу объяснить мне, чем отличаются объявления const char* и const* char и как объявить: указатель на константный массив символов, константный указатель на массив символов, указатель на массив константных символов. Просто совсем запутался в определениях, прошу помощи Использую книгу Стефана Р. Дэвиса "Программирование на С++ для чайников". Тема в книга описана, но, я понять не смог
C++ Телефонные номера, которые набираются на кнопочном телефоне ходом коня Динамическое программирование Ход конем (Время: 1 сек. Память: 16 Мб) Шахматная ассоциация решила оснастить всех своих сотрудников такими телефонными номерами, которые бы набирались на кнопочном телефоне ходом коня. Например, ходом коня набирается телефон 340-49-27. При этом телефонный номер не может начинаться ни с цифры 0, ни с цифры 8. Требуется написать программу, определяющую... http://www.cyberforum.ru/cpp-beginners/thread1236897.html
C++ А как ваше начальство относится к новым стандартам и boost?
Разрешают ли вам использовать С++11, boost? Если нет - чем обосновывают. Если сначала нет, потом да - расскажите как этого добились. Здесь же можно указывать и в какой IDE работаете. Просьба отвечать лишь тех, кто работает в корпоративном секторе.
Что означает знак двойного двоеточия "::"? C++
не могу я найти
C++ Ошибка при запуске проекта: error: no match for ‘operator>>’ http://www.cyberforum.ru/cpp-beginners/thread1236744.html
В NetBeans создал проект: Добавлено через 1 минуту #include <iostream> #include <string> using namespace std; int main() {
C++ Как понять список формальных параметров функции Bar? class Foo { void friend Bar(Foo & foo); private: int data; подробнее

Показать сообщение отдельно
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6411 / 3050 / 300
Регистрация: 04.12.2011
Сообщений: 8,237
Записей в блоге: 3
01.08.2014, 02:16     Когда и где следует использовать механизм исключительных ситуаций?
Ieroglif, вот довольно смешной код. Я пытался показать ситуацию, когда без генерации и обработки исключения обойтись трудновато, хотя может и заблуждаюсь.
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
#include <new>
using namespace std;
//в конструкторе последовательно выделяются два ресурса:
//это участки памяти под два массива
//моделируем ситуацию когда первый захвачен, а на втором - сбой
//аварийное окончание работы конструктора означает, что его деструктор вызван не будет
//будут только вызваны деструкторы стековых переменных (тут нет стековых переменных - классов))
//это значит что поймав такое исключение нужно проанализировать и если нужно освободить выделенную память самостоятельно 
struct SomeThingWillHappen{
int arr_size;
int *arr1;
int *arr2;
 
SomeThingWillHappen( int n){
int err_code=0;
arr_size = n;
 
//следующий блок try - catch не должен сработать, он написан подобно второму
try{
err_code  = 1;
arr1 = new int[arr_size];
err_code  = 0;
}
catch(bad_alloc& ba){
cerr << "bad_alloc caught: " << ba.what() << '\n';
//это первый ресурс и если не выделилась память, то и освобождать нечего
//передаём инфу наружу и всё
throw err_code ;//прерывание конструктора и передача исключения
}
//а этот мы запустим сами
try{
err_code = 2;
throw err_code;//имитация сбоя выделения памяти под массив arr2 
arr2 = new int[arr_size];//это не выполнится
err_code  = 0;
}
catch(int p){
cerr  <<"Bad_alloc arr2 at ctor SomeThingWillHappen( int n) "<< p << endl;
if(err_code == 2) {
//а тут понятно, что всё рухнуло и память под первый массив без нас никто не освободит
cerr <<"The memmory for arr1 succefuly allocated and will be released "<< p << endl;
//тип int - встроенный и запускать деструкторы по массиву не нужно, просто освобождаем
delete []arr1;
cerr <<"The memmory for arr1 released "<< endl;
err_code = 2;
throw err_code ;
}
system("pause");
}
for( int i = 0; i < arr_size; ++i) {
    arr1[i]=0;
    arr2[i]=i;
}
}
~SomeThingWillHappen(){
delete []arr1;
delete []arr2;
cout<<"destructor "<< endl;
system("pause");
}
};
int main()
{
    try{
SomeThingWillHappen a(4);
    }
    catch(int err_code){
        if(err_code == 1){
                  cerr <<"Bad_alloc arr1 at ctor SomeThingWillHappen( int n) " << endl;
//--------------------------------------------
////treat1
//--------------------------------------------
    }
        if(err_code == 2){
            cerr <<"Bad_alloc arr2 at ctor SomeThingWillHappen( int n) " << endl;
cerr <<"show/program)) must go on and we will treat the situation";
//--------------------------------------------
//treat2
//--------------------------------------------      
        }
    }
cin.get();
return 0 ;
}
 
Текущее время: 08:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru