Opened 4 years ago
Closed 4 years ago
#863 closed ожидаются исправления (задача сдана)
WW #14
Reported by: | yakovlev.aleksandr | Owned by: | Артур Гулецкий (huletski) |
---|---|---|---|
Component: | WW_vector | Version: | 2.0 |
Keywords: | Cc: |
Description
Change History (5)
comment:1 Changed 4 years ago by
comment:2 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Замечания (основные/очевидные; после исправлений, возможно, появятся новые):
- Решение собирается с warning'ом:
{build}[2086]$ make Scanning dependencies of target lab_12 [ 33%] Building CXX object CMakeFiles/lab_12.dir/src/main.cpp.o [ 66%] Building CXX object CMakeFiles/lab_12.dir/src/Product.cpp.o /home/hfx/dvl/cpp19/yakovlev.aleksandr/lab_12/src/Product.cpp: In member function ‘product::Product& product::Product::operator=(product::Product)’: /home/hfx/dvl/cpp19/yakovlev.aleksandr/lab_12/src/Product.cpp:32:1: warning: no return statement in function returning non-void [-Wreturn-type] 31 | swap(other); +++ |+ return *this; 32 | } | ^ [100%] Linking CXX executable lab_12 [100%] Built target lab_12
my_vector.h
- имя namespace'a должно быть my_vector;
- noexcept у методов не хватает (e.g. empty);
- 49: stack_holder? какое отношение "stack_" имеет к классу?
- 53: отступы.
my_vector(_impl).h
- не подключены заголовки для std::move, std::min и других функций классов -> код не компилируется с кастомным main-ом. В этот раз я исправлю локально, на следующих итерациях при обнаружении этой же ошибки проверка будет закончена;
- 21: отступы;
- не используются move'ы, где могли бы (e.g. resize);
- дублирование логики "скопировать все элементы в интервале в неинициализированную память", "инициализировать элементы в интервале при помощи конструктора по умолчанию";
- не выполняется требование "Методы и конструкторы, которые увеличивают capacity, делают его равным минимальной достаточной степени двойки.".
Баллы: 2.5, чините capacity, добавляйте move и нужные #include.
comment:3 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
вроде пофиксил (насчёт инклюдов -- у меня почему-то всё компилируется без них и я не знаю как это отключить, так что возможно есть лишние...)
comment:4 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
вроде пофиксил (насчёт инклюдов -- у меня почему-то всё компилируется без них и я не знаю как это отключить, так что возможно есть лишние...)
У меня тоже компилируется теперь. А вы в старой версии попробуйте в main.cpp my_vector.h первым инклудом подключить, должно сломаться.
Замечания:
my_vector.h
- если у Т конструктор по умолчанию выделяет ресурсы, то такой код приводит к утечке памяти:
my_vector::my_vector<Product> vec(5);
- capacity должна устанавливаться равной минимальной достаточной степени двойки, такой код падает:
my_vector::my_vector<int> v; v.reserve(8); assert(v.capacity() == 8);
- 69: а что с move-версиями?
- 86: опечатка в имени;
my_vector_impl.h
- 19: отступы;
- 57: resize не должен уменьшать размер capacity;
- 58: вызываются избыточные конструкторы по умолчанию, что плохо, учитывая, что T может быть любым (производительность). Нужно чинить (fill для части массива);
- 60: а можно ли move сделать? Если да, то почему, если нет, то почему. Ответ напишите в комментарии.
- 82: подумайте как минимизировать дублирование логики метода, учитывая, что move-версии ctop, op= T по условию noexcept и тот факт, что в качестве аргумента принимается копия элемента. Обратите внимание, что
v.push_back(v[i])
должно работать даже в случае resize'a.
Баллы: 3.5, доделывайте.
коммит сделал а тикет создать забыл, извините :(