Change History (3)

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

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

my_vector.h должен инклюдить my_vector_impl.h. Чтобы вызывающему коду достаточно было заинклюдить my_vector.h и всё заработало.

Код не скомпилировался в итоге. Нельзя заполнять и копировать вектор из произвольных элементов используя memcpy и memset. Эти функции копируют голые байты. Представь, что класс T аллоцирует память в конструкторе и освобождает в деструкторе, а ты через memcpy объект этого класса скопировал. Получишь double free когда оба объекта вызовут свои деструкторы.

Корректность пока проверить не могу -- код для вектора произвольного типа просто не скомпилировался из-за memset в resize.

Прочие замечания:

  1. Не выполняешь контракт вектора на capacity. У тебя capacity должен быть минимально необходимой степенью двойки. У тебя это не для reserve и конструктора от n не выполняется.

comment:2 Changed 3 years ago by Станислав Михайлов

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

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

Resolution: задача сдана
Status: assignedclosed
  1. Зачем поменял сигнатуру push_back? Она константную ссылку должна принимать, а не объект по значению.
  2. Контракт на изменение capacity не выполняется по прежнему. Буфер должен удваиваться только когда памяти под новый элемент не хватает, а у тебя удваивается когда память еще есть.
  3. Тест на копирование упал. Нельзя копировать произвольные объекты через memcpy.
  4. Ресайз не работает в сторону уменьшения.
  5. Все тесты на гарантии исключений попадали.

5/10

Note: See TracTickets for help on using tickets.