Главная arrow Программирование С++ arrow Вычитается lowerbound

Вычитается lowerbound

И еще одно замечание: в перегруженной операции индексирования [ ] () не выполняется никакой проверки границ. Стандарт библиотеки STL не требует такой проверки, и она не включена в код. Это резонно, потому что, за исключением задаваемого пользователем диапазона, объект RangeArray ведет себя так же, как нормальный массив (вспомните, в обычных массивах С++ не выполняется никакой проверки границ). Конечно, если вы захотите, такую проверку можно добавить в операцию [ ] ().
Далее приведена немного более сложная перегруженная операция присваивания = ().
// Присваивает один контейнер другому, template <class Т, class А> RangeArray<T, А> & RangeArray<T, А>::operator=(const RangeArray<T, A> &o) {
// Вызывает деструкторы для элементов в контейнере-приемнике. for(size_type i=0; i < size(); i++) a.destroy(&arrayptr[i]);
// Освобождает исходную память, a.deallocate(arrayptr, size());
// Выделяет память для нового размера, arrayptr = a.allocate(о.size О); upperbound = о.upperbound; lowerbound = о.lowerbound; len = о.len;
// Создает копию.
for(size_type i=0; i < sizeO; i++) arrayptr[i] = о.arrayptr[i];
return *this;
}
Сначала она уничтожает созданные ранее объекты в контейнере-приемнике и освобождает отведенную им память. Далее выделяется память, достаточная для хранения содержимого объекта-источника. Затем устанавливаются соответствующие значения переменных-членов и копируются элементы. В конце возвращается ссылка на объект-приемник.