Opened 4 years ago
Closed 4 years ago
#824 closed ожидается проверка (задача сдана)
WW #12
Reported by: | Igor Engel | Owned by: | Sokolov Viacheslav |
---|---|---|---|
Component: | WW_vector | Version: | 1.0 |
Keywords: | Cc: |
Description
Change History (4)
comment:1 Changed 4 years ago by
comment:2 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
16 my_vector<T>& operator=(my_vector other) noexcept; Нормально-ли помечать его noexcept, при том, что исключение может произойти, при копировании параметра?
да. https://godbolt.org/z/rCHVaV
40 size_t capacity_ = 0;
41 size_t size_ = 0;
42 T* array_ = nullptr;
какая мотивация делать инициализацию в месте объявления?
include/my_vector_impl.h:
не хватает разных include-ов. Например, assert, stdexcept, ostream, ... используются, но не подключены.
Для упрощения обработки конструктора можно было бы сделать вложенный класс, который в деструкторе освободит то, что уже успели заполнить (его деструктор позовется, если исключение вылетит из тела конструктора vector-а).
122 template<typename T>
123 T& my_vector<T>::operator[](std::size_t index) noexcept {
124 return array_[index];
125 }
126
127 template<typename T>
128 const T& my_vector<T>::operator[](std::size_t index) const noexcept {
129 return array_[index];
130 }
131
стоит проверить, что нет выхода за границы.
97 while(base < n) {
98 base <<= 1;
99 }
может зациклиться, если base переполнится. Наверное, есть какое-то предположение про n.
84 my_vector<T> copy = *this;
85 copy.resize_dangerous(n);
86 swap(copy);
если n < capacity_, то дополнительная аллокация не требуется.
Копирование элементов избыточно, даже если аллокация необходимо, можно использовать move.
43 template<typename T>
44 my_vector<T>& my_vector<T>::operator=(my_vector<T> other) noexcept {
45 swap(other);
46 }
не хватает return *this;
test_my_vector_default_constructable
typo constructible
Не все методы покрыты тестами (например, operator= не протестирован)
comment:3 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
ок.
Чтобы не повторять их во всех конструкторах
Добавил
Да, но уже написал так...
Добавил
Поправил
Переписал. Кажется, move'ать элементы перед тем, как добавлять новые надо, чтобы можно было гарантировать, что порядок разрушения будет обратным порядку конструированния.
Поправил.
Поправил.
Поправил.
comment:4 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
src/main.cpp: In function ‘char* strdup(const char*)’:
src/main.cpp:9:5: error: nonnull argument ‘s’ compared to NULL [-Werror=nonnull-compare]
cc1plus: all warnings being treated as errors
Makefile:20: recipe for target 'obj/main.o' failed
make: * [obj/main.o] Error 1
если убрать из глобального пространства имен, то собирается. Видимо каким-то образом приезжает декларация
::strdup([[gnu::nonnull]] const char* )