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: ожидается проверкаожидаются исправления

не надо переименовывать и как-то менять публичные интерфейсы.

/home/dmis/DATA/WORKSPACE/cpp-labs/lab_12/check/lab_12/include/MyVectorImpl.h:14:44: error: ‘aligned_alloc’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
   14 |     array_ = static_cast<T *>(aligned_alloc(alignof(T), capacity_ * sizeof(T)));

Заголовки надо подлючать там, где вы их используете. У вас компилируется только из-за того, что вы их подключили в main до MyVector?

Перегрузки операторов лучше делать friend-функциями.

/home/dmis/DATA/WORKSPACE/cpp-labs/lab_12/check/lab_12/include/my_vector.h:50:33: error: call of overloaded ‘operator<<(std::basic_ostream<char>&, const int&)’ is ambiguous
   50 |     noexcept(noexcept(operator<<(std::declval<std::ostream &>(), std::declval<const T &>())));

Да и не стоит проверять все подряд на noexcept. Операторы ввода/вывода в принципе таким быть не могут -- поскольку iostreams допускают бросание исключений.

Если что, тут еще forward нужен.
void my_vector<T>::emplace_back(Args &&... args) noexcept(noexcept(T(std::declval<Args...>())))

template<typename T>
my_vector<T>::my_vector(const my_vector <T> &other) : my_vector_holder_{other.my_vector_holder_.size_} {
    try {
        my_vector_holder_.copy(other.my_vector_holder_);
    } catch (...) {
        my_vector_holder_.~my_vectorHolder();
    }
}

Это UB с порога после первого же вылетевшего исключения и попытки дальнейшего использования. И после выхода объекта из скоупа.

Строгую гарантию исключений проверьте внимательнее.

comment:2 Changed 4 years ago by Roman Venediktov

Owner: changed from Roman Venediktov to Дмитрий Свиридкин
Type: ожидаются исправленияожидается проверка
Version: 1.02.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 Roman Venediktov

Owner: changed from Roman Venediktov to Дмитрий Свиридкин
Type: ожидаются исправленияожидается проверка
Version: 2.03.0

Ок, понял

comment:5 Changed 4 years ago by Дмитрий Свиридкин

Resolution: задача сдана
Status: assignedclosed

resize нарушает строгую гарантию:

несмотря на то, что содержимое не изменится, у вас происходит реаллокация, ломающая ссылки.
реаллокацию тоже надо откатывать.


8

Note: See TracTickets for help on using tickets.