Opened 3 years ago

Closed 3 years ago

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

WW#11

Reported by: Daniil Lyubaev Owned by: Святослав Власов
Component: WW_vector Version: 3.0
Keywords: Cc:

Description

Пока без тестов и обработки ошибок (запускать наверное смысла нет, хотя оно собирается).

Change History (6)

comment:1 Changed 3 years ago by Daniil Lyubaev

Version: 1.0

Добавил функцию test_my_vector(), только я не уверен, что правильно тесты сделал
UPD1: Добавил функцию test_my_vector_default_constructible().
UPD2: Добавил эксепшены.

Last edited 3 years ago by Daniil Lyubaev (previous) (diff)

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

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

Твой вектор не инклюдит заголовочники, от которых зависит. Поэтому тестировочный код просто не собрался. Пришлось фиксить руками. Будь внимателен в следующий раз.

Тест на ресайз упал. Почему-то после vec.resize(0);, vec.empty() возвращает false;
Тесты на гарантии исключений попадали c ошибками валгринда -- память течет. Ты не вызываешь деструкторы у уже созданных или скопированных объектов в случае, если один из конструкторов кидает исключение

  1. В такой конструкции нет никакого смысла? Зачем ты ловишь исключение, которое ты сразу же пробрасываешь дальше ничего не делая? Такого же эффекта можно достичь просто убрав этот try-catch блок
        try {
            new_buf = new char[n * sizeof(T)];
        } catch (...) {
            throw;
        }
    
  2. Кажется, что смысл в bool-аргументе функции clear_mem отпадет, если ты в тех случаях, где ты clear_mem вызываешь с false ты предварительно выставишь size_ в 0.
  3. swap-trick в операторе присваивания здорово бы сократил тебе код

6/10

comment:3 Changed 3 years ago by Daniil Lyubaev

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

Если честно, я не увидел, каких инклюдов не хватает -- g++ не жалуется, а я не вижу :( Есть ли какой-то флаг, чтоб это сразу показывало? (в гугле не смог найти, извините, если Вам их опять придется добавлять). Остальное пофиксил.

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

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

У тебя my_vector.h зависит от <iostream>, т.к. определял оператор <<, но не инклюдил его. У тебя g++ не жаловался, потому что в твоем коде <iostream> был подключен в main.cpp выше чем "my_vector.h". Если бы ты заинклюдил my_vector.h до <iostream>, то компиляция бы и у тебя также рухнула.

Такого быть не должно. Все файлы от которых зависит твой код должны инклюдиться тобой самостоятельно.

Тест на ресайз упал с double free. Еще у тебя ресайз почему-то требует оператора присваивания у класса Т. Его может не быть. Твоя реализация должна обходиться только конструктором копирования.

Тест на строгую гарантию исключений у resize и push_back тоже упал -- вектор не остается в том же состоянии, если внутри этих функций летит эксепшен.

8/10

comment:5 Changed 3 years ago by Daniil Lyubaev

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

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

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

У тебя в push_back исключения не пробрасываются наверх, когда ловятся. Ты забыл throw; написать.
Если добавить -- тесты проходят.

Других претензий к коду у меня нет, 10/10

Note: See TracTickets for help on using tickets.