Opened 3 years ago

Closed 3 years ago

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

WW #10 (Ushakov)

Reported by: ushakov.vladislav Owned by: Святослав Власов
Component: WW cpp_io Version: 3.0
Keywords: Cc:

Description


Change History (5)

comment:1 Changed 3 years ago by Святослав Власов

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

Корректность:

  1. Все тесты прошли кроме одного -- на чтение очень длинное имя девелопера (100 символов) из бинарногоф айла. Что-то с ним не так и прочитался он у тебя неверно.
  2. Если поток при чтении c-str встретился с концом файла до того как нашел нулевой символ -- это ошибка чтения, а у тебя поток остается в корректном состоянии.

По стилю:

  1. Делать name_.clear(); в деструкторе Employee бессмысленно. Деструктор класса std::string сам за собой почистит всю память. Вообще для Employee деструктор не нужен, тот что по умолчанию прекрасно всё сделает.
  2. Про остальные классы можно сказать то же самое. Собственный декструктор нужен, когда класс владеет какими-то ресурсами, которые сами себя не освобождают, например указателем на объект на куче или сишным файловым дескриптом FILE*. Но когда поля класса -- это примитивные типы не требующие освобождения или объекты которые сами за собой подчищают ресурсы, нужда в деструкторе отпадает.
  3. std::endl лучше чем '\n'
  4. Создание сотрудника по коду типа лучше вынести в отдельную функцию. Этот паттерн называется "фабричный метод". Можно сделать его статическим методом Employee.
  5. init_flag выглядит избыточным. Можно же написать Employee* empl = nullptr; ... assert(empl);

В остальном всё очень хорошо, особенно для первой посылки. Пока что 6/10

comment:2 Changed 3 years ago by ushakov.vladislav

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

Полностью отказаться от деструкторов почему-то не получилось. Если убираю деструктор у EmployeeArray, появляется утечка. Если его оставляю, а другие убираю, компилятор начинает жаловаться, что не понимает, какой деструктор вызывать при
delete employees_[i];. Возможно надо работников как-то по-другому в employees_ добавлять (либо я что-то не понял). Зато пустые деструкторы чудесно работают.

Остальное поправил.

comment:3 Changed 3 years ago by Святослав Власов

Resolution: задача сдана
Status: assignedclosed
Type: ожидается проверкаожидаются исправления

Деструктор ~EmployeeArray тебе необходим, потому что он владеет ресурсом -- массивом указателей на сотрудников. Сам массив указателей лежит в векторе, поэтому память под него будет очищена вектором автоматически, но вот память под объекты самих сотрудников очищена не будет, это нужно сделать вручную.

  1. Пустые деструкторы можно просто не писать, компилятор сгенерирует их автоматически.
  2. Когда происходит что-то не так при чтении в операторе >> не нужно падать по ассерту -- достаточно перевести поток в failed-state. И уже снаружи ты сможешь проверить состояние потока и упасть по ассерту если это необходимо.

9/10

comment:4 Changed 3 years ago by ushakov.vladislav

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

Почему-то тикет в закрытых оказался.

Все исправил.

comment:5 Changed 3 years ago by Святослав Власов

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

Мне всё нравится, круто, молодец!
10/10

Note: See TracTickets for help on using tickets.