|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|||||||||||
Оценка кода28.01.2020, 22:43. Показов 6989. Ответов 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
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|
| 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
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|||
| 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
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||
| 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
|
|||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|||
| 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
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|||
| 09.02.2020, 03:27 | |||
![]() Добавлено через 2 минуты Я специально оставил пример, который можно менять.
0
|
|||
|
Just Do It!
|
||
| 09.02.2020, 03:45 | ||
|
то это значит что можно и не допустить ситуацию выброса такого исключения. но вангую, что решение простое и универсальное должно быть, иначе оно бессмысленно по выше приведенному соображению. ну или исправить скорее не полностью, если без этого объекта можно обойтись.
0
|
||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||
| 09.02.2020, 03:49 | ||
|
В принципе если весь код сквозняком поддерживает работу без исключений, так, как это сделано в Google, то нет никакой проблемы. В реальной же ситуации могут быть нюансы.
0
|
||
| 09.02.2020, 03:49 | |
|
Помогаю со студенческими работами здесь
80
оценка кода Оценка стиля кода Оценка кода динамического двумерного массива
Оценка стиля написания кода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Двоичная куча, min-heap
alhaos 20.05.2026
Двоичная куча
Двоичная куча — структура данных, которая всегда держит самый важный элемент наготове.
Представьте очередь к хилеру в игре, и очередь из игроков в приоритете те у кого меньше. . .
|
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
|
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера»
Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит.
Придуман Биллом Госпером в 1970-х, опубликован в. . .
|
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb">
<style>
<!]>
</ style>
<g id="bush">
</ g>
</ svg>
function fn(){
let rost;/ / высота древа
let xx=165,yy=210,w=256;
|
|
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов,
содержащихся в реализации модуля. По-умолчанию все члены модуля доступны:
module Foo
let x = 10
let boo () = printfn "boo"
. . .
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|