allocator_base 类

定义基类和常用函数需要从同步筛选器创建一个用户定义的分配器。

语法

template <class Type, class Sync>
class allocator_base

参数

类型
由分配器分配元素类型。

Sync
分配器的同步策略有 sync_none 类sync_per_container 类sync_per_thread 类sync_shared 类

构造函数

构造函数 说明
allocator_base 构造 allocator_base 类型的对象。

Typedef

类型名称 说明
const_pointer 提供指向由分配器管理的对象类型的常量指针的类型。
const_reference 提供对由分配器管理的对象类型的常量引用的类型。
difference_type 有符号的整型,可以表示指向由分配器管理的对象类型的指针值之间的差异。
pointer 提供指向由分配器管理的对象类型的指针的类型。
reference 提供指向对分配器管理的对象类型的引用的类型。
size_type 无符号整型类型,可以表示类型 allocator_base 的对象可以分配的任何序列的长度。
value_type 由分配器管理的类型。

成员函数

成员函数 说明
_Charalloc char 类型的数组分配存储。
_Chardealloc 为包含 char 类型元素的数组释放存储。
address 查找指定了其值的对象的地址。
allocate 分配大小足以存储至少某个指定数量的元素的内存块。
construct 在使用指定值初始化的指定地址处构造特定类型的对象。
deallocate 从指定位置开始从存储中释放指定数量的的对象。
destroy 调用对象析构函数而不释放存储对象的内存。
max_size 在可用内存用完之前,返回可以由类分配器的对象分配的类型 Type 的元素数。

要求

标头:<allocators>

命名空间: stdext

allocator_base::_Charalloc

char 类型的数组分配存储。

char *_Charalloc(size_type count);

参数

count
数组中要分配的元素数目。

返回值

指向已分配对象的指针。

备注

在使用无法编译重新绑定的编译器进行编译时,容器使用此成员函数。 它通过返回调用同步筛选器的 allocate 函数的结果来为用户定义的分配器实现 _Charalloc

allocator_base::_Chardealloc

为包含 char 类型元素的数组释放存储。

void _Chardealloc(void* ptr, size_type count);

参数

ptr
指向要从存储中释放的第一个对象的指针。

count
要从存储中释放的对象数量。

注解

在使用无法编译重新绑定的编译器进行编译时,容器使用此成员函数。 它通过调用同步筛选器的 deallocate 函数来为用户定义的分配器实现 _Chardealloc。 指针 ptr 必须由分配器对象调用 _Charalloc 在较早时间返回,分配器对象应与 *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
忽略此参数。

返回值

指向已分配对象的指针。

备注

成员函数为用户定义的分配器实现内存分配,其方法是通过返回调用同步筛选器类型 Type * if _Nx == 1allocate 函数的结果,否则,则通过返回调用 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_base 实例。 第二个构造函数构造 allocator_base 实例,从而对任何 allocator_base<Type, _Sync> 实例 aallocator_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::deallocate

从指定位置开始从存储中释放指定数量的的对象。

void deallocate(pointer ptr, size_type _Nx);

参数

ptr
指向要从存储中释放的第一个对象的指针。

_Nx
要从存储中释放的对象数量。

备注

通过调用同步筛选器 Sync if _Nx == 1 上的 deallocate(ptr) 为用户定义的分配器执行此成员函数,否则,调用 operator delete(_Nx * ptr)

allocator_base::destroy

调用对象析构函数而不释放存储对象的内存。

void destroy(pointer ptr);

参数

ptr
指定要销毁的对象的地址的指针。

备注

通过调用 ptr->~Type() 为用户定义的分配器执行此成员函数。

allocator_base::difference_type

有符号的整型,可以表示指向由分配器管理的对象类型的指针值之间的差异。

typedef std::ptrdiff_t difference_type;

allocator_base::max_size

在可用内存用完之前,返回可以由类分配器的对象分配的类型 Type 的元素数。

size_type max_size() const;

返回值

可分配的元素数量。

备注

如果 0 < (size_t)-1 / sizeof(Type),则通过返回 (size_t)-1 / sizeof(Type) 为用户定义的分配器执行此成员函数,否则 1

allocator_base::pointer

提供指向由分配器管理的对象类型的指针的类型。

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;

另请参阅

<allocators>