Класс allocator_base
Определяет базовый класс и общие функции, необходимые для создания определяемого пользователем распределителя из фильтра синхронизации.
Синтаксис
template <class Type, class Sync>
class allocator_base
Параметры
Тип
Тип элементов, распределяемых распределителем.
Синхронизация
Политика синхронизации распределителя: класс sync_none, класс sync_per_container, класс sync_per_thread или класс sync_shared.
Конструкторы
Конструктор | Description |
---|---|
allocator_base | Создает объект типа allocator_base . |
Определения типов
Введите имя | Description |
---|---|
const_pointer | Тип, предоставляющий постоянный указатель на тип объекта, управляемого распределителем. |
const_reference | Тип, предоставляющий постоянную ссылку на тип объекта, управляемого распределителем. |
difference_type | Тип целого числа со знаком, который может представлять разницу между значениями указателей на тип объекта, управляемого распределителем. |
pointer | Тип, предоставляющий указатель на тип объекта, управляемого распределителем. |
reference | Тип, предоставляющий ссылку на тип объекта, управляемого распределителем. |
size_type | Неподписанный целочисленный тип, который может представлять длину любой последовательности, которую может выделить объект типа allocator_base . |
value_type | Тип, управляемый распределителем. |
Функции элементов
Функция-член | Description |
---|---|
_Charalloc | Выделяет память для массива типа char . |
_Chardealloc | Освобождает хранилище для массива, содержащего элементы типа char . |
address | Находит адрес объекта, значение которого задано. |
allocate | Выделяет блок памяти, достаточный для хранения по крайней мере некоторого указанного числа элементов. |
construct | Создает определенный тип объекта по указанному адресу, инициализированный с использованием заданного значения. |
deallocate | Освобождает указанное число объектов из памяти, начиная с заданной позиции. |
destroy | Вызывает деструктор объектов без освобождения памяти, в которой хранился объект. |
max_size | Возвращает количество элементов типа Type, которые могут быть выделены объектом класса allocator в пределах имеющейся свободной памяти. |
Требования
Заголовок:<распределители>
Пространство имен: stdext
allocator_base::_Charalloc
Выделяет память для массива типа char
.
char *_Charalloc(size_type count);
Параметры
count
Число выделяемых элементов в массиве.
Возвращаемое значение
Указатель на выделяемый объект.
Замечания
Эта функция-член используется контейнерами при компиляции с компилятором, который не может скомпилировать повторную привязку. Она реализует _Charalloc
для пользовательского распределителя, возвращая результат вызова функции allocate
фильтра синхронизации.
allocator_base::_Chardealloc
Освобождает хранилище для массива, содержащего элементы типа char
.
void _Chardealloc(void* ptr, size_type count);
Параметры
ptr
Указатель на первый объект, который необходимо освободить из хранилища.
count
Количество объектов для освобождения из хранилища.
Замечания
Эта функция-член используется контейнерами при компиляции с компилятором, который не может скомпилировать повторную привязку. Она реализует _Chardealloc
для пользовательского распределителя путем вызова функции deallocate
фильтра синхронизации. Указатель ptr должен быть возвращен ранее путем вызова _Charalloc
allocator, который сравнивает его с *this
, выделяя объект массива того же типа и размера. _Chardealloc
никогда не создает исключений.
allocator_base::address
Находит адрес объекта, значение которого задано.
pointer address(reference val);
const_pointer address(const_reference val);
Параметры
Val
Константное или неконстантное значение объекта, адрес которого ищется.
Возвращаемое значение
Константный или неконстантный указатель на найденный объект соответственно константного или неконстантного значения.
Замечания
Эта функция-член реализуется для пользовательского распределителя путем возврата &val
.
allocator_base::allocate
Выделяет блок памяти, достаточный для хранения по крайней мере некоторого указанного числа элементов.
template <class Other>
pointer allocate(size_type _Nx, const Other* _Hint = 0);
pointer allocate(size_type _Nx);
Параметры
_Nx
Число выделяемых элементов в массиве.
_Hint
Этот параметр не учитывается.
Возвращаемое значение
Указатель на выделяемый объект.
Замечания
Эта функция-член реализует выделение памяти для пользовательского распределителя путем возврата результата вызова функции allocate
фильтра синхронизации типа Type *
, если _Nx == 1
, в противном случае — путем возврата результата вызова приведения operator new(_Nx * sizeof(Type))
к типу Type *
.
allocator_base::allocator_base
Создает объект типа allocator_base
.
allocator_base();
template <class Other>
allocator_base(const allocator_base<Other, Sync>& right);
Параметры
right
Объект allocator для копирования.
Замечания
Первый конструктор создает экземпляр allocator_base. Второй конструктор создает экземпляр allocator_base
так, что для любого экземпляра allocator_base<Type, _Sync>
a
, allocator_base<Type, Sync>(allocator_base<Other, Sync>(a)) == a
.
allocator_base::const_pointer
Тип, предоставляющий постоянный указатель на тип объекта, управляемого распределителем.
typedef const Type *const_pointer;
allocator_base::const_reference
Тип, предоставляющий постоянную ссылку на тип объекта, управляемого распределителем.
typedef const Type& const_reference;
allocator_base::construct
Создает определенный тип объекта по указанному адресу, инициализированный с использованием заданного значения.
void construct(pointer ptr, const Type& val);
Параметры
ptr
Указатель места, в котором должен создаваться объект.
Val
Значение, с которым создаваемый объект будет инициализирован.
Замечания
Эта функция-член реализуется для пользовательского распределителя путем вызова new((void*)ptr Type(val)
.
allocator_base::d eallocate
Освобождает указанное число объектов из памяти, начиная с заданной позиции.
void deallocate(pointer ptr, size_type _Nx);
Параметры
ptr
Указатель на первый объект, который необходимо освободить из хранилища.
_Nx
Количество объектов для освобождения из хранилища.
Замечания
Эта функция-член реализуется для пользовательского распределителя путем вызова deallocate(ptr)
в фильтре синхронизации Sync
, если _Nx == 1
, в противном случае — путем вызова operator delete(_Nx * ptr)
.
allocator_base::d e
Вызывает деструктор объектов без освобождения памяти, в которой хранился объект.
void destroy(pointer ptr);
Параметры
ptr
Указатель, обозначающий адрес уничтожаемого объекта.
Замечания
Эта функция-член реализуется для пользовательского распределителя путем вызова ptr->~Type()
.
allocator_base::d ifference_type
Тип целого числа со знаком, который может представлять разницу между значениями указателей на тип объекта, управляемого распределителем.
typedef std::ptrdiff_t difference_type;
allocator_base::max_size
Возвращает количество элементов типа Type
, которые могут быть выделены объектом класса в пределах имеющейся свободной памяти.
size_type max_size() const;
Возвращаемое значение
Количество элементов, которые могут быть выделены.
Замечания
Эта функция-член реализуется для пользовательского распределителя путем возврата (size_t)-1 / sizeof(Type)
, если 0 < (size_t)-1 / sizeof(Type)
в противном случае — 1
.
allocator_base::p ointer
Тип, предоставляющий указатель на тип объекта, управляемого распределителем.
typedef Type *pointer;
allocator_base::reference
Тип, предоставляющий ссылку на тип объекта, управляемого распределителем.
typedef Type& reference;
allocator_base::size_type
Неподписанный целочисленный тип, который может представлять длину любой последовательности, которую может выделить объект типа allocator_base
.
typedef std::size_t size_type;
allocator_base::value_type
Тип, управляемый распределителем.
typedef Type value_type;