назначение аллокаторов
От: 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();
// ...
};

В итоге мы обеспечиваем некоторый стандартный набор операций для всех контейнеров и стандартный набор итерационных операций.
О какие еще общих услугах, которые будут представляться распределителями памяти идет речь? Это только распределение памяти
или что-то еще?
Re: назначение аллокаторов
От: Abyx Россия  
Дата: 20.01.13 11:53
Оценка: +1
Здравствуйте, b.armaley, Вы писали:

BA>Страуструп пишет: "предоставление общих услуг ...


не читайте вы эти русские переводы %)
In Zen We Trust
Re[2]: назначение аллокаторов
От: alpha21264 СССР  
Дата: 20.01.13 12:36
Оценка: -1
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, b.armaley, Вы писали:


BA>>Страуструп пишет: "предоставление общих услуг ...


A>не читайте вы эти русские переводы %)


Ты бы лучше чего по делу сказал.

Течёт вода Кубань-реки куда велят большевики.
Re[3]: назначение аллокаторов
От: Abyx Россия  
Дата: 20.01.13 12:37
Оценка: -1
Здравствуйте, alpha21264, Вы писали:

A>Ты бы лучше чего по делу сказал.


чем лучше?
In Zen We Trust
Re: назначение аллокаторов
От: Vamp Россия  
Дата: 20.01.13 14:20
Оценка: 7 (1)
BA>Помогите понять на простом примере зачем нужны аллокаторы.
Безотносительно приведенного отрывка, аллокаторы нужны для того, чтобы контейнеры, создавая динамические объекты, могли использовать некий прозрачный интерфейс для обращения к памяти "вообще". Например, если ты хочешь поместить вектор в shared memory — тебе надо сделать аллокатор, который умеет аллоцировать в shared memory. Кроме услуг по собственно выделению памяти, аллокатор определяет базовые типы — что такой указатель, что такое ссылка — что теоретически дает возможность размещать контейнеры STL в неких совершенно нетрадиционных хранилищах, к которым неприменимы понятия "указатель" и "ссылка" в стандартном смысле.
Да здравствует мыло душистое и веревка пушистая.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.