Разбираю Страуструпа. Прошу сильно не ругаться. Помогите понять на простом примере зачем нужны аллокаторы.
Страуструп пишет: "предоставление общих услуг для всех контейнеров удалось обеспечить не через общий базовый класс, а при помощи распределителей памяти (allocator) ...". При этом выше он объясняет, что при разработке STL отказались от стандартного класса для итераторов и стандартного класса для контейнеров. Введение аллокаторов отличается от двух подходов, которые он изложил: общий базовый класс для контейнеров или общий базовый класс для итераторов.
ну например, из того же Страуструпа модифицируем его библиотеку для Vector и List (16.2 Проектирование контейнеров),
так чтобы избавиться от базового класса Itor:
template <class T> class Vector{
public:
Vector(size_t n_);
~Vector();
T& operator[](size_t n);
// ...
};
template<class T> class Vector_Iterator {
private:
Vector<T> &v;
size_t index;
public:
Vector_Iterator(Vector<T> & );
T* first();
T* next();
// ...
};
template <class T> class List{
public:
List();
~List();
void put(T*);
// ...
};
template<class T> class List_Iterator {
private:
List<T> &lst;
List<T>::Link p;
public:
List_iterator(List<T> &);
T* first();
T* next();
// ...
};
В итоге мы обеспечиваем некоторый стандартный набор операций для всех контейнеров и стандартный набор итерационных операций.
О какие еще общих услугах, которые будут представляться распределителями памяти идет речь? Это только распределение памяти
или что-то еще?