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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Блок try... finally на С++ 
:(
    Опции темы
Kuvaldis
Дата 4.10.2007, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 11
Всего: 61



Всем привет!
Вот возникла у меня необходимость реализации такого блока (такого ключевого слова вроде как нету)
принцип действия блока: управление в finally попадает всегда, даже если были исключения.
Нужно для освобождения ресурсов
Аналогично придумал делать только с метками, но это мягко говоря некрасиво.
Что посоветуете? И интересно, а почему такая возможность не была заложена в язык?

СУВ, Kuvaldis 


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
Daevaorn
Дата 4.10.2007, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Kuvaldis @  4.10.2007,  21:10 Найти цитируемый пост)
Что посоветуете? И интересно, а почему такая возможность не была заложена в язык?

возможность заложена, называется RAII. При раскрутки стека в момент исключения вываются деструкторы объектов.
PS: finally есть у MS
PM MAIL WWW   Вверх
Alek86
Дата 4.10.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Kuvaldis @  4.10.2007,  20:10 Найти цитируемый пост)
Нужно для освобождения ресурсов


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


--------------------
user posted image    user posted image
PM MAIL   Вверх
archimed7592
Дата 4.10.2007, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Alek86, эти умные ресурсы и представляют из себя идиому RAII smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
maxim1000
Дата 4.10.2007, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



ну если уж хочется совсем похоже на try-finally, можно попробовать так:
Код

try
{
    //тут какие-то действия
}
catch(...)
{
    //тут finally-часть
    throw
}



--------------------
qqq
PM WWW   Вверх
Daevaorn
Дата 4.10.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Kuvaldis @  4.10.2007,  21:10 Найти цитируемый пост)
управление в finally попадает всегда, даже если были исключения.

Цитата(maxim1000 @  4.10.2007,  23:20 Найти цитируемый пост)
ну если уж хочется совсем похоже на try-finally, можно попробовать так:

"всегда" в твой catch(...) не попадешь
PM MAIL WWW   Вверх
maxim1000
Дата 4.10.2007, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата(Daevaorn @  4.10.2007,  22:29 Найти цитируемый пост)
"всегда" в твой catch(...) не попадешь

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


--------------------
qqq
PM WWW   Вверх
nickless
Дата 5.10.2007, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



maxim1000, 
код в finally выполняется всегда, и когда не было исключений и когда были, а в catch только после исключения.


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
archimed7592
Дата 5.10.2007, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(maxim1000 @  4.10.2007,  23:56 Найти цитируемый пост)
это не так? 

Так. А что если исключения не будет smile?
Суть finally в гарантированной отработке в любых условиях: было исключение, не было исключения, return отработал, управление само по себе до finally дошло...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Daevaorn
Дата 5.10.2007, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(maxim1000 @  5.10.2007,  00:56 Найти цитируемый пост)
это не так? 

мы должны попасть туда всегда при выходе из функции.
PM MAIL WWW   Вверх
maxim1000
Дата 5.10.2007, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



а... ступил smile


--------------------
qqq
PM WWW   Вверх
SergeCpp
Дата 5.10.2007, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 15
Всего: 124



Kuvaldis, а почему Рихтера не читаем?!...

Там же всё разъяснено в деталях

ЧАСТЬ V СТРУКТУРНАЯ ОБРАБОТКА ИСКЛЮЧЕНИЙ 

ГЛАВА 23 Обработчики завершения 
ГЛАВА 24 Фильтры и обработчики исключений


Это сообщение отредактировал(а) SergeCpp - 5.10.2007, 08:24
PM MAIL WWW ICQ   Вверх
MAKCim
Дата 5.10.2007, 08:25 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



SergeCpp, 
SEH - это решение для конкретной среды


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
korbian
Дата 5.10.2007, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 14



а может так?
Код

try
{
    //тут какие-то действия

    // на последок
    throw;
}
catch(...)
{
    //тут finally-часть
    throw
}




--------------------
korbian ©
PM   Вверх
Daevaorn
Дата 5.10.2007, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(korbian @  5.10.2007,  09:46 Найти цитируемый пост)
а может так?

и что? тоже другое поведение.
PM MAIL WWW   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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