Change History (4)

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

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

Компиляция упала.
Во-первых, имя неймспейса перепутала. Оно должно быть containers.
Во-вторых, векто не должен требовать от типа Т наличие конструктора без параметров, если у него не вызываются метод resize и конструктор от числа. У тебя требует (потому что resize вызывается в clear, а clear в деструкторе).

На всех тестах валгринд детектит утечки -- у тебя не совпадает метод, каким ты выделяешь память и освобождаешь её. Прочитай каким методом должна освобождаться память выделенная std::aligned_alloc: https://en.cppreference.com/w/cpp/memory/c/aligned_alloc

Исправь пока эти замечания.

comment:2 Changed 3 years ago by Tatiana Pridonyants

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

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

Type: ожидается проверкаожидаются исправления
  1. Валгринд детектит утечки у конструктора с числовым параметром.
  2. Все тесты на гарантии исключений попадали. Строгую гарантию исключений твои методы не выполняют.
  3. Вот этот код -- потенциальный UB:
                    for (; i > 0; i--) {
                        array_[i - 1].~T();
                    }
    

Потому что i имеет тип size_t, а он беззнаковый, поэтому когда i = 0, выражение array_[i - 1] превратится в тыкву и деструктор вызовется у черта на рогах }:-)

  1. Оператор перемещения в задании не требовался, и написан он у тебя неправильно, поэтому лучше убери

Тебе осталось добавить гарантии исключений. Каждый метод вектора должен иметь строгую гарантию, т.е. если внутри какого-то метода летит исключение, то вектор должен вернуться в то же состояние, что был до вызова метода. В том числе и по capacity. Упросить тебе жизнь в этом поможет swap-trick.

Пока что 6/10

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

Resolution: задача сдана
Status: assignedclosed
Note: See TracTickets for help on using tickets.