Программирование >>  Операторы преобразования типа 

1 ... 228 229 230 [ 231 ] 232 233 234 ... 239


Оператор сообщает, что все специализации данного распределителя

являются взаимозаменяемыми.

template <class Tl. class Т2>

bool operator== {const allocator<Tl>S,

const allocator<T2>S) throwO {

return true;

template <class Tl. class T2>

bool operator!= (const allocator<Tl>&.

const allocator<T2>&) throwO {

return false;

Используя эту базовую реализацию, вы можете без особых трудностей реализовать собственный распределитель. Как правило, все отличия от приведенной реализации сосредоточены в функциях max size(), allocate() и deallocate(). В этих трех функциях вы программируете политику выделения памяти (например, повторного использования памяти вместо се немедленного освобождения), расходования общей памяти или отображения памяти на сегменты объектно-ориентированной базы данных.

За дополнительными примерами обращайтесь по адресу http: www.josuttis.com/ libbool</examples. html.

Требования к распределителям памяти

Ниже перечислены типы и операции, которые должны поддерживаться распределителями в соответствии с требованиями стандарта. Для распределителей, которые могут использоваться стандартными контейнерами, устанавливаются особые требования - более жесткие, чем для обычных распределителей.

Определения типов

рдспределитель::value type

О Тип элементов.

О Эквивалент Т для allocator<T>.

рдспределитель::size type

О Тип беззнаковых целочисленных значений, представляющих размер наибольшего объекта в модели распределения памяти.

О Чтобы распределитель мог использоваться со стандартными контейнерами, этот тип должен быть эквивалентен size t.

рдспределитель::di fference type

О Тип знаковых целочисленных значений, представляющих разность между двумя указателями в модели распределения памяти.



О Чтобы распределитель мог использоваться со стандартными контейнерами, этот тип должен быть эквивалентен ptrdiff t

распределитель::pointer

О Тип указателя на тип элемента,

О Чтобы распределитель мог использоваться со стандартными контейнерами, этот тип должен быть эквивалентен Т* для allocator<T>.

распределитель :;const po1nter

О Тип константного указателя на тип элемента.

О Чтобы распределитель мог использоваться со стандартными контейнерами, этот тип должен быть эквивалентен const Т* для allocator<T>.

распределитель ;;reference

О Тип ссылки на тип элемента. О Эквивалент T8i для allocator<T>.

распределитель::const reference

О Тип константной ссылки на тин элемента. О Эквивалент const T8i для aIlocator<T>.

распределитель::геЫ nd

О Шаблонная структура, позволяющая любому распределителю косвенно выделять память для другого типа.

О Объявление должно выглядеть так:

template <class Т> class распределитель { public: template <class U> struct rebind {

typedef распреаепитель<\}> other:

О Назначение структуры rebind разъясняется на с. 707.

Операции

распределитель::allocator О

О Конструктор но умолчанию. О Создает объект распределителя.

распределитель::allocator (const allocators а)

О Копирующий конструктор.



712 Глава 15, Распределители памяти

О Создает объект распределителя таким образом, что память, выделеиная ори-гинатом, может освобождаться через копию, и наоборот.

распределитель:-.-allocator () О Деструктор.

О Уничтожает объект распределителя.

pointer распределитель::a66ress {reference value) const pointer распределитель::address (const reference value)

О Первая форма возвращает неконстантный указатель на неконстантное значение value.

О Вторая форма возвращает константный указатель на константное значение value.

распределитель: :mx. size ()

О Возвращает максимальное значение, которое может передаваться функции allocateO для выделения памяти.

pointer распределитель::allocate Csize type пит) const polnter рас/7ре е/7иге/7ь;:allocate {size type num.

allocator<void>:;const pointer hint)

О Обе формы возвращают указатель на намять, выделенную для шт элементов типа Т.

О Элементы не конструируются и не инициализируются (для иих не вызываются конструкторы).

о Смысл необязательного второго аргумента определяется реализацией. Например, в нем может передаваться дополнительная информация для повышения эффективности.

void pdcnpe/?e/?ire/7b: ;deallocate (pointer p. size type num)

О Освоболсдает память, па которую ссылается указатель р.

О Блок/? должен быть выделен функцией allocate() того же или равного распределителя.

О Аргумент/? не может быть равен NULL или 0.

О К моменту вызова deallocate() элементы должны быть уже уничтожены.

void распределитель:[Construct (pointer p. const Т& value)

О Инициализирует память одного элемента, на которую ссылается указатель р, значением value.

О Эквивалент:

new((vo1d*)p)T(;/a/t;e)

void a ocdtor;;destroy (pointer p)

О Уничтожает объект, на который ссылается указатель р, без освобождения памяти.



1 ... 228 229 230 [ 231 ] 232 233 234 ... 239

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика