назначение аллокаторов
От: b.armaley  
Дата: 19.01.13 21:35
Оценка:
Разбираю Страуструпа. Прошу сильно не ругаться. Помогите понять на простом примере зачем нужны аллокаторы.

Страуструп пишет: "предоставление общих услуг для всех контейнеров удалось обеспечить не через общий базовый класс, а при помощи распределителей памяти (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();
// ...
};

В итоге мы обеспечиваем некоторый стандартный набор операций для всех контейнеров и стандартный набор итерационных операций.
О какие еще общих услугах, которые будут представляться распределителями памяти идет речь? Это только распределение памяти
или что-то еще?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.