Opened 4 years ago
Closed 4 years ago
#825 closed ожидается проверка (задача сдана)
WW #12
Reported by: | Obryadina Alexandra | 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 Obryadina Alexandra |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 4 years ago by
Owner: | changed from Obryadina Alexandra to Дмитрий Свиридкин |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.0 |
comment:3 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to Obryadina Alexandra |
---|---|
Type: | ожидается проверка → ожидаются исправления |
clear приводит к UB
оператор вывода добавляет лишний пробел
resize нарушает строгую гарантию исключений
comment:4 Changed 4 years ago by
Owner: | changed from Obryadina Alexandra to Дмитрий Свиридкин |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 2.0 → 3.0 |
comment:5 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
resize все еще нарушает строгую гарантию исключений:
Если конструктор T по умолчанию кинет исключение, нужно откатывать move элементов и вызывать деструкторы у успешно созданных объектов.
8
Note: See
TracTickets for help on using
tickets.
my_vector::my_vector<T>::my_vector_holder::my_vector_holder(std::size_t n)
лучше завернуть всю реализацию в namespace, чем явно у каждого метода его указывать:
//#include "my_vector_impl.h"
этот "заголовок" и должен был тут подключаться. А уже в нем не нужно подключать "my_vector.h" и писать include guards. Это стандартная практика для разделения реализации шаблонов.Используйте malloc или aligned_alloc. Для new не гарантировано, что выделенная память будет выравнена так, что подойдет для любого объекта.
new (newh.array_ + newh.size_) T
Добавьте скобки, а то какой-нибудь int создастся неинициализированным https://stackoverflow.com/a/620217resize не сработает, если n > size && n < capacity
Зачем resize пепревыделяет память, когда нужно уменьшить размер?
Также можно избежать дублирования кода, если реализовать resize с помощью pop/push
В условии требуется, чтоб reserve добивал capacity до степени двойки.