|
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
|
|
Наследование от std::exception06.11.2019, 14:11. Показов 8811. Ответов 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
|
||||
|
фрилансер
6444 / 5639 / 1128
Регистрация: 11.10.2019
Сообщений: 15,000
|
|
| 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
|
||
|
фрилансер
6444 / 5639 / 1128
Регистрация: 11.10.2019
Сообщений: 15,000
|
||
| 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
|
|||
|
фрилансер
6444 / 5639 / 1128
Регистрация: 11.10.2019
Сообщений: 15,000
|
|
| 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
|
|||||||||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 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
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||||
| 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
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|