Opened 4 years ago
Closed 4 years ago
#859 closed ожидается проверка (задача сдана)
WW 12
Reported by: | Roman Venediktov | 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 Roman Venediktov |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 4 years ago by
Owner: | changed from Roman Venediktov to Дмитрий Свиридкин |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.0 |
comment:3 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to Roman Venediktov |
---|---|
Type: | ожидается проверка → ожидаются исправления |
try { my_vector_holder_.copy(other.my_vector_holder_); } catch (...) { my_vector_holder_.~MyVectorHolder(); throw; }
Еще раз: тут UB. так делать нельзя. Деструктор объекта, созданного на стеке, будет вызван повторно.
comment:4 Changed 4 years ago by
Owner: | changed from Roman Venediktov to Дмитрий Свиридкин |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 2.0 → 3.0 |
Ок, понял
comment:5 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
resize нарушает строгую гарантию:
несмотря на то, что содержимое не изменится, у вас происходит реаллокация, ломающая ссылки.
реаллокацию тоже надо откатывать.
8
Note: See
TracTickets for help on using
tickets.
не надо переименовывать и как-то менять публичные интерфейсы.
Заголовки надо подлючать там, где вы их используете. У вас компилируется только из-за того, что вы их подключили в main до MyVector?
Перегрузки операторов лучше делать friend-функциями.
Да и не стоит проверять все подряд на noexcept. Операторы ввода/вывода в принципе таким быть не могут -- поскольку iostreams допускают бросание исключений.
Если что, тут еще forward нужен.
void my_vector<T>::emplace_back(Args &&... args) noexcept(noexcept(T(std::declval<Args...>())))
Это UB с порога после первого же вылетевшего исключения и попытки дальнейшего использования. И после выхода объекта из скоупа.
Строгую гарантию исключений проверьте внимательнее.