Opened 4 years ago
Closed 4 years ago
#835 closed ожидается проверка (задача сдана)
WW #12
Reported by: | Tarabonda German | Owned by: | Дмитрий Свиридкин |
---|---|---|---|
Component: | WW_vector | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (5)
comment:1 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to Tarabonda German |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 4 years ago by
Owner: | changed from Tarabonda German to Дмитрий Свиридкин |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to Tarabonda German |
---|
include/my_vector_impl.h:19:29: error: assignment of member ‘my_vector::my_vector<Product>::my_vector_holder::capacity_’ in read-only object 19 | other.holder_.capacity_ = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~^~~ include/my_vector_impl.h:20:25: error: assignment of member ‘my_vector::my_vector<Product>::my_vector_holder::size_’ in read-only object 20 | other.holder_.size_ = 0; | ~~~~~~~~~~~~~~~~~~~~^~~ include/my_vector_impl.h:21:26: error: assignment of member ‘my_vector::my_vector<Product>::my_vector_holder::array_’ in read-only object 21 | other.holder_.array_ = nullptr; include/my_vector_impl.h:19:29: error: assignment of member ‘my_vector::my_vector<Product>::my_vector_holder::capacity_’ in read-only object 19 | other.holder_.capacity_ = 0; | ~~~~~~~~~~~~~~~~~~~~~~~~^~~ include/my_vector_impl.h:20:25: error: assignment of member ‘my_vector::my_vector<Product>::my_vector_holder::size_’ in read-only object 20 | other.holder_.size_ = 0; | ~~~~~~~~~~~~~~~~~~~~^~~ include/my_vector_impl.h:21:26: error: assignment of member ‘my_vector::my_vector<Product>::my_vector_holder::array_’ in read-only object 21 | other.holder_.array_ = nullptr;
С сигнатурами операторов все так же проблемы. Должно быть два оператора. Копирования и перемещения.
resize нарушает строгую гарантию исключений.
в reserve нужно делать move элементов
в resize UB.
comment:4 Changed 4 years ago by
Owner: | changed from Tarabonda German to Дмитрий Свиридкин |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 2.0 → 3.0 |
comment:5 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
include/my_vector_impl.h:27:31: error: binding reference of type ‘my_vector::my_vector<ThrowingClass>::my_vector_holder&’ to ‘const my_vector::my_vector<ThrowingClass>::my_vector_holder’ discards qualifiers 27 | holder_.my_swap(other.holder_); | ~~~~~~^~~~~~~ In file included from src/main.cpp:3: include/my_vector.h:50:40: note: initializing argument 1 of ‘void my_vector::my_vector<T>::my_vector_holder::my_swap(my_vector::my_vector<T>::my_vector_holder&) [with T = ThrowingClass]’ 50 | void my_swap(my_vector_holder& other) { | ~~~~~~~~~~~~~~~~~~^~~~~ In file included from /usr/include/c++/9/cassert:44, from src/main.cpp:10: src/main.cpp: In instantiation of ‘void test_move() [with T = int]’: src/main.cpp:910:24: required from here src/main.cpp:796:27: error: ambiguous overload for ‘operator=’ (operand types are ‘myvec<int>’ {aka ‘my_vector::my_vector<int>’} and ‘std::remove_reference<my_vector::my_vector<int>&>::type’ {aka ‘my_vector::my_vector<int>’})
holder_.my_swap(other.holder_); other.holder_.capacity_ = 0; other.holder_.size_ = 0; other.holder_.array_ = nullptr;
Такая реализация оператора перемещения приведет к утечке памяти. Кто содержимое исходного вектора-то очистит?
resize нарушает строгую гарантию исключений.
6.5
Note: See
TracTickets for help on using
tickets.
почему reserve создает новые объекты, а resize ведет себя как reserve при увеличении размера, но как resize при уменьшении?
Зачем resize реаллоцирует контейнер при уменьшении размера?
new (holder_.array_ + holder_.size_) T;
Добавьте скобки.
https://stackoverflow.com/questions/620137/do-the-parentheses-after-the-type-name-make-a-difference-with-new
Оператор перемещения как-то очень странно перемещает. Больше похоже на копию
my_vector::my_vector<T>::my_vector(my_vector<T>& other)
Это не конструктор копий. У конструктора копий должен быть const.А где конструктор перемещения?
Две такие сигнатуры одновременно не уживаются.
Никакую функцию, не требующую конструирования объектов, нельзя реализовывать через resize