Opened 4 years ago

Closed 4 years ago

#197 closed ожидается проверка (задача сдана)

Home assignment #1

Reported by: marshalkin.nikita Owned by: rutsky,grabovoy.philipp
Priority: проверка Milestone: ha1-deadline
Component: HA#1 matrices Version: 1.0
Keywords: Cc:

Description


Change History (3)

comment:1 Changed 4 years ago by Филипп

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

Приветствую!

Пару штук на доделку:

  1. Из списка частых ошибок: 6 (название таргета) (и smoke, наверное, должен зависеть от $(EXEC)?).
  2. В старом стандарте std::ifstream просят const char* для работы (конструктора, open),

И общие штуки:

  1. Явное приведение через static_cast<bool>(std::ifstream) избыточно -- оно произойдет автоматически.
  2. Почему data_(new double[0]()), а не std::nullptr? Первое ведет к undefined behavior при обращении -- этот класс ошибок, конечно, сложнее отловить.
  3. И проверку границ матриц лучше полностью инкапсулировать в методы -- библиотека будет самостоятельнее. Лучше не через assert, который можно заигнорить при билде (через NDEBUG).

comment:2 Changed 4 years ago by marshalkin.nikita

Milestone: ha1-milestone2ha1-deadline
Type: ожидаются исправленияожидается проверка

Привет!

  1. Fixed
  2. Fixed
  1. Fixed (cpplint посоветовал так приводить)
  2. Для однородности. Если будет разыменование, то не проверил размерности, .Height(), .Width() будут равны нулю. А писать дополнительное условие при освобождении памяти - некрасиво.
  3. Google code style, говорит: исключения - плохо. Рассчитывал, что перед обращениями будут проверяться границы где-то выше. А если нет - получаешь assert. Как в таком случае лучше обрабатывать ошибки? Возвращать "особую" ошибочную матрицу, которая при приведении к bool будет возвращать false?

comment:3 Changed 4 years ago by Филипп

Resolution: задача сдана
Status: newclosed
  1. В данном случае компилятор выделит память под хранение размера аллоцированного массива (нуля).
  2. Исключения — медленно :) Так как в задаче не просят что-то делать при проблемах, то выкидывать их из функций и обрабатывать через try/catch выглядит нормальным планом. Для более общей либы подойдет вариант с "кодом возврата". Или можно вынести проверки в отдельные методы, — matrix::can_be_multiplied_by(const matrix& other), — но нужно следить за инвариантами: например, чтобы любой константный метод/манипуляции friend-классов не меняли возвращаемое значение таких функций — чтобы не возникало ситуаций-гонок как с exists и open на файле.
Note: See TracTickets for help on using tickets.