|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|||||||||||
Оценка кода28.01.2020, 22:43. Показов 7687. Ответов 123
Метки нет (Все метки)
Здравствуйте, прошу вас всех оценить мой код , по возможности дать советы что так , а что не так и как это исправить либо в каком направлении смотреть , это моя первая попытка создать что-то не ради забавы , а чтобы использовать это в реальной жизни. Сразу скажу что еще не все доделал что хотел бы. Это декодер asn1.der , данные передаются в decode() в виде BLOB конвертированного в массив знаков.
header Кликните здесь для просмотра всего текста
cpp Кликните здесь для просмотра всего текста
0
|
|||||||||||
| 28.01.2020, 22:43 | |
|
Ответы с готовыми решениями:
123
Оценка кода
|
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
| 09.02.2020, 02:18 [ТС] | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 09.02.2020, 02:26 | ||
std::bad_alloc?Кликните здесь для просмотра всего текста
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 09.02.2020, 02:28 | |
|
1
|
|
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
| 09.02.2020, 02:30 [ТС] | |
|
DrOffset, аааа, даже так, я не знал об этом, я думал объект конструируется в момент его определения, а конструктор играет только роль инициализации
0
|
|
|
Неэпический
|
||
| 09.02.2020, 02:31 | ||
new SomeType, и из конструктора SomeType вылетает исключение. В данном случае вопрос не в том какое именно исключение вылетает и почему, а в том, как бы ТС обезопасил себя от подобной ситуации.
0
|
||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
| 09.02.2020, 02:32 [ТС] | |
|
DrOffset, выходом из ситуации может быть использование контейнеров вместо массивов?
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 09.02.2020, 02:34 | |||
|
Я же написал, пример синтетический. Однако ситуация, когда в одном конструкторе динамически выделяются два ресурса вполне реальна. И в этом случае исключение не обязательно может быть об ошибке выделения памяти. Оно может прилететь из конструктора динамически создаваемого объекта. Вообще об обработке или игнорировании bad_alloc можно спорить вечно. Я бы может быть и поспорил, если бы это было хоть немного важно в контексте обсуждаемого вопроса. Стратегия "если не выделилось, значит уже все и так пропало" мне хорошо знакома, и я сам ей пользовался неоднократно. Однако, я повторюсь, здесь это не важно. Вообще. Добавлено через 19 секунд
0
|
|||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
| 09.02.2020, 02:36 [ТС] | |
|
DrOffset, но я так понимаю есть другой вариант лучше?
Добавлено через 1 минуту DrOffset, ну или вынести выделение памяти в отдельную функцию
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 09.02.2020, 02:37 | ||
|
Думайте о них, как о двух ресурсах. Довольно трудно написать, как вы успели заметить, такой пример, который одновременно устроил бы всех. Слишком велик соблазн сразу начать обращать внимание на частности. Поэтому давайте поговорим о концепции. Допустим у нас есть класс, в котором динамически выделяются два ресурса. Допустим эти ресурсы библиотечные и в этих библиотеках используются исключения. Код концептуально имеет представленную выше структуру. Ваши действия?
0
|
||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
| 09.02.2020, 02:41 [ТС] | |
|
DrOffset, мои действия по поводу того как предотвратить ошибку утечки памяти?
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 09.02.2020, 02:41 | |||
|
если под int ты подразумевал SomeType,я оставил спойлер.
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 09.02.2020, 02:43 | |||
|
Добавлено через 1 минуту
0
|
|||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
| 09.02.2020, 02:45 [ТС] | |
|
DrOffset, ну я бы убрал инициализации массива их конструктора в специально созданную для этого функцию, но это не подходит так что кроме как использования контейнеров я не знаю ничего, смарт поинтеры?
0
|
|
|
Неэпический
|
|||
| 09.02.2020, 02:47 | |||
operator new гарантирует только, что сам operator new не выбросит исключение. На конструкторы создаваемых объектов это не распространяется, поэтому, если SomeType выбросит исключение, то оно так же вылетит из new-expression.
2
|
|||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
| 09.02.2020, 03:19 [ТС] | |
|
DrOffset, и кстати как работает исключение bad_alloc? Как вообще работает оператор new? Он вызывает malloc и если вернулся nullptr то вылетает bad_alloc?
0
|
|
|
Неэпический
|
|
| 09.02.2020, 03:23 | |
|
1
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 09.02.2020, 03:27 | |||
![]() Добавлено через 2 минуты Я специально оставил пример, который можно менять.
0
|
|||
|
Just Do It!
|
||
| 09.02.2020, 03:45 | ||
|
то это значит что можно и не допустить ситуацию выброса такого исключения. но вангую, что решение простое и универсальное должно быть, иначе оно бессмысленно по выше приведенному соображению. ну или исправить скорее не полностью, если без этого объекта можно обойтись.
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 09.02.2020, 03:49 | ||
|
В принципе если весь код сквозняком поддерживает работу без исключений, так, как это сделано в Google, то нет никакой проблемы. В реальной же ситуации могут быть нюансы.
0
|
||
| 09.02.2020, 03:49 | |
|
оценка кода Оценка стиля кода Оценка кода динамического двумерного массива
Оценка стиля написания кода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|