Шаг 560.
Библиотека STL. Распределители памяти. Требования к распределителям памяти. Операции

    На этом шаге мы рассмотрим операции, выполняемые над распределителями памяти.

распределитель:allocator()
Конструктор по умолчанию. Создает объект распределителя.
распределитель::allocator (const allocator& a)
Копирующий конструктор. Создает объект распределителя таким образом, что память, выделенная оригиналом, может освобождаться через копию, и наоборот.
распределитель::~allocator ()
Деструктор. Уничтожает объект распределителя.
pointer распределитель::address (reference value) 
const_pointer распределитель::address (const_reference value)
Первая форма возвращает неконстантный указатель на неконстантное значение value. Вторая форма возвращает константный указатель на константное значение value.
распределитель::max_size ()
Возвращает максимальное значение, которое может передаваться функции allocate() для выделения памяти.
pointer распределитель::allocate (size_type num) 
const_pointer распределитель::allocate (size_type num,
            allocator<void>::const_pointer hint)
Обе формы возвращают указатель на память, выделенную для num элементов типа Т. Элементы не конструируются и не инициализируются (для них не вызываются конструкторы). Смысл необязательного второго аргумента определяется реализацией. Например, в нем может передаваться дополнительная информация для повышения эффективности.
void распределитель::deallocate (pointer p, size_type num)
Освобождает память, на которую ссылается указатель р. Блок р должен быть выделен функцией allocate() того же или равного распределителя. Аргумент р не может быть равен NULL или 0. К моменту вызова deallocate() элементы должны быть уже уничтожены.
void распределитель::construct (pointer p, const T& value)
Инициализирует память одного элемента, на которую ссылается указатель р, значением value. Эквивалент: new((void*)p)T(value).
void allocator::destroy (pointer p)
Уничтожает объект, на который ссылается указатель р, без освобождения памяти. Вызывает деструктор объекта. Эквивалент: ((T*)р)->~T().
bool operator== (const распределитель& a1, const распределитель& а2)
Возвращает true, если распределители а1 и a2 взаимозаменяемы. Два объекта распределителя считаются взаимозаменяемыми, если память, выделенная одним из них, может быть освобождена другим. Чтобы распределитель мог использоваться со стандартными контейнерами, распределители одного типа обязаны быть взаимозаменяемыми, поэтому функция должна всегда возвращать true.
bool operator!= (const распределитель& a1, const распределитель& а2)
Возвращает true, если распределители а1 и a2 не взаимозаменяемы. Эквивалент: !(a1==a2). Чтобы распределитель мог использоваться со стандартными контейнерами, распределители одного типа обязаны быть взаимозаменяемыми, поэтому функция должна всегда возвращать false.

    На следующем шаге мы рассмотрим операции с неинициализированной памятью.




Предыдущий шаг Содержание Следующий шаг