Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Алокатори

Кожний контейнерний клас у STL використовує клас Allocator, в якому інкапсульована інформація про моделі пам’яті, яка використовується у програмі. Різні моделі пам’яті подають різні вимоги до покажчиків, посилань, розмірів цілих значень і т.п. Клас Allocator містить в собі інформацію про покажчики, константні покажчики, посилання, константні посилання, розміри об’єктів, функції розміщення та виділення об’єктів, а також деякі інші функції. Припускається, що час виконання операції над алокаторами сталий.

Зважаючи на те, що інформація про моделі пам’яті інкапсульована у алокаторі, контейнери STL можуть пристосуватися до різних моделей пам’яті за допомогою різних алокаторів.

У STL визначено стандартний алокатор, застосований за замовчуванням, який достатній для переважної більшості програм. Він має такий інтерфейс:

class allocator {

public:

typedef size_t size_type;

typedef ptrdiff difference_type;

template<class T>

class types {

typedef T* pointer;

typedef const T* const_pointer;

typedef T& reference;

typedef const T& const_reference;

typedef T value_type;

};

allocator();

~ allocator();

template<class T>

typename types<T>::pointer

address(types<T>::reference x) const;

template<class T>

typename types<T>:: const_pointer

address(types<T>::const_reference x) const;

template<class T,class U>

typename types<T>::pointer

allocate(size_type n, types<U>::const_pointer hint);

template<class T>

void deallocate(types<T>::pointer p);

size_type max_size()const;

};

class allocator:: types<void> { //specialization

public:

typedef void* pointer;

typedef const void * const_pointer;

typedef void value_type;

};

void* operator new(size_t N, allocator& a);

};

В алокаторі тип даних інкапсульований у вкладеному шаблоні-класі types, який має такі члени, залежні від параметра шаблона T :

typedef T* pointer; — тип покажчика в моделі пам’яті.

typedef const T* const-pointer; — тип константного покажчика в моделі пам’яті.

typedef T& reference; — тип адреси в моделі пам’яті.

typedef const T& const-reference; — тип константної адреси в моделі пам’яті.

typedef T valuetype; — тип об’єктів у контейнері.

Інші члени алокатора мають такий зміст:

typedef sizet sizetype; — тип, який подає розмір найбільшого об’єкта в моделі пам’яті.

typedef ptrdiff differencetype; — тип, який подає різницю між двома покажчиками в моделі пам’яті.

allocator(); — конструктор алокатора.

~ allocator(); — деструктор алокатора.

template<class T>

typename types<T>::pointer

address(types<T>::referense x) const; — визначає покажчик об’єкта х.

template<class T>

typename types<T>:: const_pointer

address(types<T>::const_referense x) const; — визначає константний покажчик об’єкта х.

template<class T,class U>

typename types<T>::pointer

allocate(sizetype n, types<U>::constpointer hint); — виділяє пам’ять для n об’єктів типу sizetype , не конструюючи їх; використовує глобальну операцію new; зазначимо, що різні моделі пам’яті потребують різних функцій Allocate, що і є причиною інкапсуляції цієї функції в алокаторі; покажчик hint можна використовувати як засіб локального засилання; у функціях — членах контейнерів як hint використовується this.

template<class T>

void deallocate(types<T>::pointer p); — звільняє пам’ять з покажчиком p, використовуючи глобальну операцію delete, перед цим викликом deallocate усі об’єкти у звільнюваної пам’яті мають бути ліквідовані.

sizetype maxsize ()const; — визначає максимальне значення

differencetype.




Переглядів: 597

<== попередня сторінка | наступна сторінка ==>
Адаптери | STL та об’єктно-орієнтоване програмування

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.07 сек.