Вопрос: Как дела с catch(...) в MS?
Aug. 16th, 2011 12:38 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Думаю, многие из вас в курсе, что в NPTL механизм pthread_cancel() реализован с помощью исключений. Таким образом, следует избегать нейтрализации catch(...).
Знающие люди, а скажите, есть ли в мелко-мягкой среде какие-то подводные камни, из-за которых тоже следует избегать такой нейтрализации?
Заранее благодарен! :-)
Update: Обратные ссылки: alextutubalin: Об исключениях (C++)
Знающие люди, а скажите, есть ли в мелко-мягкой среде какие-то подводные камни, из-за которых тоже следует избегать такой нейтрализации?
Заранее благодарен! :-)
Update: Обратные ссылки: alextutubalin: Об исключениях (C++)
Re: за catch( ... ) без rethrow вообще надо убивать
Date: 2011-08-16 11:22 am (UTC)Что сделаешь, если у тебя реализация на Си++, а тебя просят спрятать это за обычным Си, требуя, чтобы никаких исключений не вырывалось наружу?
Да, есть некоторый набор исключений самой библиотеки.
Но она использует, например, STL.
no subject
Date: 2011-08-16 12:13 pm (UTC)делаешь catch( std::exception& e ) и все
можешь даже после этого в сишный интерфейс какую-нибудь строковую ошибку вернуть (по e.what() выдастся const char *
Re: в чем проблема? все исключения STL унаследованы от std::e
Date: 2011-08-16 02:44 pm (UTC)Спасибо!
no subject
Date: 2011-08-16 02:47 pm (UTC)Re: сделай проверку, e.what() вполне может вернуть NULL
Date: 2011-08-16 02:59 pm (UTC)А тип исключения, действительно, может многое сказать, ведь базовый класс STL исключений содержит виртуальную таблицу, а значит, можно получить run-time type infromation - люблю этим пользоваться в этих случаях.
Re: сделай проверку, e.what() вполне может вернуть NULL
Date: 2011-08-16 03:16 pm (UTC)Re: сделай проверку, e.what() вполне может вернуть NULL
Date: 2011-08-16 03:21 pm (UTC)"А вы так - не делайте!"
Re: сделай проверку, e.what() вполне может вернуть NULL
Date: 2011-08-16 03:22 pm (UTC)Re: сделай проверку, e.what() вполне может вернуть NULL
Date: 2011-08-16 03:34 pm (UTC)У меня вызовы - кошерные? Кошерные!
Библиотека с остальным кодом в исполняемый модуль собралась? Собралась!
Что ты ещё от меня хочешь?
А прострелить себе ногу - я тебе могу и без исключений и в одной среде способов предложить; те же встроенные конструкторы и невстроенные деструкторы: создавай одни в одной библиотеке в отладке, а разрушай - в другой в релизе, ну или что-то в этом роде.
Re: сделай проверку, e.what() вполне может вернуть NULL
Date: 2011-08-16 03:35 pm (UTC)Re: сделай проверку, e.what() вполне может вернуть NULL
Date: 2011-08-16 03:37 pm (UTC)Да, мне и без этих мыслей - хватает, чем задуматься.
Но ты, эта, держи меня в тонусе, продолжай писать... ;-)