|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
Наследование от std::exception06.11.2019, 14:11. Показов 8931. Ответов 29
Метки нет (Все метки)
Приветствую всех. Создаю библиотеку классов и в некоторых (исключительных) случаях планирую кидать исключения. Скажите, имеет ли смысл класс исключения наследовать от std::exception? Если имеет, то укажите, пожалуйста, причины.
0
|
|
| 06.11.2019, 14:11 | |
|
Ответы с готовыми решениями:
29
Обработка исключений типа std::exception Unhandled exception at 0x7c812a5b : Microsoft C++ exception: std::bad_alloc at memory location 0x0012f350 Создание своего класса исключений, наследование std::exception |
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 07.11.2019, 12:05 | ||
|
потому что тебе вообще не нужны собственные классы эксепшенов. используй стандартные: std::logic_error, std::runtime_error, etc
0
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
||
| 07.11.2019, 14:59 [ТС] | ||
![]() Кроме этого, мало мне в качестве информации об исключении одного текстового поля.
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 07.11.2019, 15:37 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||
| 07.11.2019, 16:51 | |||||||||||||
|
даже если это кастомные эксепшены. их всё равно всегда ловят стандартным образом:
std::exception,это такой красноречивый признак делитанта, который пишет ненадежный код. второй признак делитанта: когда на кастомный эксепшен пытаются навесить блэкджек со шлюхами, забывая об отказоусточивости последнего. об этом пара слов поподробнее: что не так с этим кодом?
при конструировании используется выражение std::string(file),которое в свою очередь тоже может бросить исключение. и тогда вместо рантайма полетит бадаллок. таким образом, вместо вменяемой диагностики, можно неиллюзорно схлопотать нежданчик, который замаскирует исходную проблему. грамотный код гарантирует, что бросок эксепшена не спровоцирует никаких других эксепшенов. и что любые методы класса эксепшенов так же не спровоцируют эксепшен. и вот что бы не морочить голову ни себе, ни людям, нужно не умничать, а использовать уже заранее продуманные стандартные классы. с заранее сконструированными диагностическими сообщениями. тупиковая ветвь в эволюции я вот даже не знаю, что у них там под капотом. второе - даже не гуглится.
2
|
|||||||||||||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|||
| 07.11.2019, 22:17 [ТС] | |||
|
hoggy, я читал твои сообщения в других темах, поэтому понимаю, что тягаться с тобой в знании С++ себе дороже
. Спасибо за развернутый ответ.То есть, даже если я создам свой класс исключения, унаследовавшись от std::exception, передаваемые в исключении значения в программе должны быть константами? Кстати, их базовый класс исключений Exception не унаследован от std::exception.
0
|
|||
| 08.11.2019, 08:34 [ТС] | |
|
Не по теме: Отредактировали мое последнее сообщение и даже не сообщили об этом... Что за беспредел? Что я нарушил?
0
|
|
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||||
| 08.11.2019, 12:30 | ||||
|
Уже лучше библиотеку писать вообще без исключений, что кстати и часто делают.
0
|
||||
|
фрилансер
6461 / 5670 / 1130
Регистрация: 11.10.2019
Сообщений: 15,090
|
|
| 08.11.2019, 13:12 | |
|
не знаю, как другим, а лично меня раздражают библиотеки/функции, которые швыряются исключениями. На кой они мне? Только код загромождать. Мне вполне достаточно возврата false/код ошибки /текст ошибки
0
|
|
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|||||||
| 08.11.2019, 13:24 [ТС] | |||||||
0
|
|||||||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||
| 08.11.2019, 13:31 | ||
|
И того кто хотел сделать чтобы оператор [] исключения бросал - тоже.
1
|
||
|
фрилансер
6461 / 5670 / 1130
Регистрация: 11.10.2019
Сообщений: 15,090
|
||
| 08.11.2019, 14:01 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 08.11.2019, 15:17 | ||
|
ты вообще понимаешь, зачем нужны исключения?
0
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|||
| 08.11.2019, 15:45 [ТС] | |||
|
И никто из 3-х человек не сказал что делать, если возникает ситуация в приведенном выше примере. Добавлено через 50 секунд
0
|
|||
|
фрилансер
6461 / 5670 / 1130
Регистрация: 11.10.2019
Сообщений: 15,090
|
|
| 08.11.2019, 15:55 | |
|
d7d1cd, не во всех, конечно, случаях. Но выход за край вектора почти всегда вызывает краш (отладчик покажет место краша и состояние переменных). В остальных я увижу кривую работу алгоритма и так же буду разбираться в отладчике
0
|
|
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|||||||||||||
| 08.11.2019, 16:09 | |||||||||||||
1, 2, 3, 4, 5, 6, 7.У меня есть какой-то контейнер в котором я храню эти значения. И вот мне надо сделать какие-то вычисления (сложить, умножить там и тд) над данными числами, я как хороший программист вынесу это в функцию:
Мне надо все обращения к оператору [] оборачивать в try-catch блок и я надеюсь его исключения отнаследованы от std::exception иначе бить уже можно выше рук. И мой пример уже выглядит так:
noexcept спецификатор.Любой из этих вариантов плохой и несет за собой огромный оверхед, и я просто с пустого места лишаюсь части оптимизаций, а я ведь просто хотел получить элемент из массива... Добавлено через 2 минуты
0
|
|||||||||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 08.11.2019, 16:13 | ||
|
1
|
||
|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
| 09.11.2019, 18:42 [ТС] | |
|
Azazel-San, так зачем оборачивать в try-catch? Ошибка выхода за пределы массива найдена же. По сути, исключение в операторе [] для этого и бросалось: чтобы указать, что где-то происходит выход за пределы массива...
Но теперь DrOffset указал, что это не исключительная ситуация, а ошибка программиста и показал как надо поступать в таком случае. Спасибо! ![]() Но по исключениям все равно вопрос. Например, метод at std::vector при выходе бросает исключение. Но ведь это не исключительная ситуация, а ошибка! Почему тогда бросается исключение?
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||||
| 09.11.2019, 19:24 | ||||
at выход за пределы диапазона рассматривается как исключительная ситуация. Предчувствуя у вас когнитивный диссонанс сразу скажу, что нет особого смысла выяснять эти вещи в отрыве от проекта. Возможно мы можем найти такую область, где выход за пределы вектора можно рассматривать как исключительную ситуацию, и тогда нам понадобится vector::at вместо vector::operator[]. Однако по моему опыту я применял vector::at ровно 0 (ноль) раз. Т.е. в моей практике не было достаточно весомых случаев для применения этого кейса.Добавлено через 2 минуты
0
|
||||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|||||
| 09.11.2019, 23:48 | |||||
|
Конечно, для данного тривиального примера Вы, в своих проектах вольны делать что угодно и не ловить исключений, но если речь заходит об использовании такого кода другими, в качестве, например, библиотеки, то такое поведение уже не позволимо. Вы же не знаете кто, как и где будет использовать вашу библиотеку, Вы должны предусмотреть все варианты. Даже под всякими нагрузками, поведение кода может меняться. Представьте лица тех разработчиком приложение которых начало падать из-за того что ваша библиотека где-то не обрабатывает исключения.. Это скорее отличный инструмент который в некоторых моментах и расставленный в нужных местах может сохранить много времени, но я бы не стал только на него полагаться или злоупотреблять им.
0
|
|||||
| 09.11.2019, 23:48 | |
|
Помогаю со студенческими работами здесь
20
Выдаёт ошибку "Unhandled exception at 0x00007F exception: std::bad_alloc in memory location" Вылетает на std::length_error exception Грамотно обработать ошибку std::exception
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|