Change History (11)

comment:1 Changed 4 years ago by Egor Suvorov

Owner: changed from Артур Гулецкий (huletski) to gabitov.daniil
Type: ожидается проверкаожидаются исправления

comment:2 Changed 4 years ago by gabitov.daniil

Type: ожидаются исправленияожидается проверка

comment:3 Changed 4 years ago by gabitov.daniil

Type: ожидается проверкаожидаются исправления

comment:4 Changed 4 years ago by gabitov.daniil

Type: ожидаются исправленияожидается проверка

comment:5 Changed 4 years ago by gabitov.daniil

Owner: changed from gabitov.daniil to Артур Гулецкий (huletski)

comment:6 Changed 4 years ago by Артур Гулецкий (huletski)

Type: ожидается проверкаожидаются исправления

Общие замечания:

  • valgrind находит ошибки при выполнении умножения;
  • ошибки при некоторых попытках доступа к к несуществующему элементу матрицы.

Замечания:

  • print/load лучше реализовать через перегрузку операторов;
  • Matrix(std::string file_name). лучше принимать std::istream;
  • matrix.cpp:18: кто удалит память из arr в случае исключения? зачем передавать arr в качестве аргумента (и возвращать это значение); функцию можно сделать статической;
  • потоки могут бросать исключения (нужно “включить” такой режим работы у объекта), если устанавливается определенный флаг ошибки. Это поможет избавиться проверяющих ifов после каждой операции чтения;
  • (в отличие от оp+= и op*=) op+, op* должны возвращать новую матрицу, this меняться не должен;
  • matrix.cpp:88. списки инициализации;
  • main.cpp:4. cassert
  • main.cpp:31. почему не хранить матрицу на стеке?
  • main.cpp: неясно зачем в регистрах хранится матрица по указателю (логика усложняется). Если беспокоит производительность — можно было реализовать метод Matrix::swap (если пока не рассказывали об operator=(Matrix&&) и std::move);
  • main.cpp: обработка MatrixException? дублируется.

Баллы: 3.5.

comment:7 Changed 4 years ago by Артур Гулецкий (huletski)

UPD: если чинить дублирование добавлением try над всеми if'ами станет хуже с т.з. вложенности. Если нет идей как можно организовать обработку команд иначе, можно не чинить.

comment:8 Changed 4 years ago by gabitov.daniil

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:9 Changed 4 years ago by Артур Гулецкий (huletski)

Type: ожидается проверкаожидаются исправления

Замечания:

main.cpp

  • 17: старайтесь называть переменные не по типу хранимого значения, а по его смыслу: s/matrix_vector/registers, т.к. предполагается, что читающему код неважно в какой структуре хранятся матрицы (std::array, std::map, etc);
  • 34: stream >> matrix_vector[reg_number]; проще;

matrix.cpp

  • 13: неясно почему successful_allocs переменная класса, а не локальная. FYI: как можно было сделать без учета числа успешных аллокаций посмотрели на практике;
  • блоки try 15, 21 можно объединить в один (нужно инициализировать _arr nullptr'ом, чтобы в общем обработчике исключения понимать успешно ли ему выделилась память);
  • 65: (fyi) noexcept у метода неоднозначный (холиварный). Технически, исключения из метода не вылетит (если и вылетит, то при копировании аргумента в параметр, а это еще не код метода), но для пользователя метода statement вида matrix1 = matrix2; не будет иметь no-exception гарантии; субъективно кажется, что noexcept в этом случае запутывает;
  • 91: а если поток передать в режиме "бросай при установке error flag'a"? Лучше noexcept убрать;
  • 108: как раз здесь можно элементы брать через unsafe версию метода, чтобы избежать избыточных проверок, т.к. точно знаем, что индексы корректны;
  • 115: op= возвращает *this -> return *this = *this + other; проще. FYI: реализация op+ через op+= была бы эффективнее (в op+= не делалась бы лишняя копия).

Баллы: 8.75 (мелкие замечания по стилю, noexcept у op<<). Можно доделыать.

Last edited 4 years ago by Артур Гулецкий (huletski) (previous) (diff)

comment:10 Changed 4 years ago by gabitov.daniil

Type: ожидаются исправленияожидается проверка
Version: 2.03.0

comment:11 Changed 4 years ago by Артур Гулецкий (huletski)

Resolution: задача сдана
Status: assignedclosed

matrix.cpp

  • 25-28, 34-37: можно вынести в отдельный приватный метод;
  • 131: можно сразу возвращать результат выражения.

Баллы: 10.

Note: See TracTickets for help on using tickets.