Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Кто пользуется try() catch(...) ?
 
Неужели нужная штука?

Мне всегда казалось, что это нужно лишь тем кто ленится проверять возвращаемые из функций статусы и в итоге у него все валится... все равно уже в catch() ни утечки не вернуть, ни понять что же произошло нельзя.
А пользоваться trow() или RaiseException в своей программе мне пока не надо было...
 
удобно, если глубоко по вызовам уходишь... иначе приходица прокидывать много раз код ошибки наверх
 
Цитата
ksiva пишет:
Неужели нужная штука?

Мне всегда казалось, что это нужно лишь тем кто ленится проверять возвращаемые из функций статусы и в итоге у него все валится... все равно уже в catch() ни утечки не вернуть, ни понять что же произошло нельзя.
А пользоваться trow() или RaiseException в своей программе мне пока не надо было...
Нужная, нужная. Потому что за собой убирать всегда нужно.
(В смысле отпускать файлы, освобождать память и т.д)
А коды возврата - я посмотрю как ты проверишь, когда тебе ексепшн кинет какая-нибудь функция.
 
Цитата
ksiva пишет:
Неужели нужная штука?

Мне всегда казалось, что это нужно лишь тем кто ленится проверять возвращаемые из функций статусы и в итоге у него все валится... все равно уже в catch() ни утечки не вернуть, ни понять что же произошло нельзя.
А пользоваться trow() или RaiseException в своей программе мне пока не надо было...

вообще конструкция очень удобна, если пользовать фишку типизированных исключений. например утя 10 классов, каждый из которых может выбрасывать исключения определенных типов, например OutOfRangeException и InvalidParameterException. допустим взводицца исключение InvalidParamterException. ты его (и только его) свободно поймашь конструкцией
Код
try { } catch (InvalidParameterException& exc) { }
 
Цитата
Gray пишет:
А коды возврата - я посмотрю как ты проверишь, когда тебе ексепшн кинет какая-нибудь функция.

очень просто. берем MSDEV... =)
 
вот у меня щас валится IShellFolder::ParseDisplayName() c кодом "RPC сервер недоступен.". вот тут без try catch никак не обойдусь - код интерфейса то не мой.

Код
     IShellFolder * lpsf = NULL;
     if ( FAILED( ::SHGetDesktopFolder( &lpsf ) ) )
                return FALSE;
     HRESULT hr;
     ULONG chEaten;
     LPITEMIDLIST lpi;
     ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER | SFGAO_DISPLAYATTRMASK | SFGAO_REMOVABLE | SFGAO_FILESYSTEM;
     LPTSTR lpb = _T("G:\");
     hr = lpsf->ParseDisplayName(GetSafeHwnd(), NULL, T2OLE(lpb), &chEaten, &lpi, &ulAttrs);
 
Цитата
ksiva пишет:
вот у меня щас валится IShellFolder::ParseDisplayName() c кодом "RPC сервер недоступен.". вот тут без try catch никак не обойдусь - код интерфейса то не мой.

ParseDisplayName() вообще-то не должно выбрасывать исключений. обычная функция, возвращающая HRESULT (если, конечно, не через #import юзать)... бери дебуггер и проверяй параметры...
 
к сожалению у Микрософта еще много багов в коде. :( вот это один из них
 
2ksiva: давно не юзал =) буду в курсе =)
 
Да и для собственных ф-ций супер удобно. Просто гораздо меньше кода, по сравнению с проверками кодов возврата. Если программо большая то try catch незаменимы.
Страницы: 1
Читают тему