|
Программирование >> Операторы преобразования типа
Оператор сообщает, что все специализации данного распределителя являются взаимозаменяемыми. 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) О Уничтожает объект, на который ссылается указатель р, без освобождения памяти.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |