定义基类和常用函数需要从同步筛选器创建一个用户定义的分配器。
语法
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 == 1 的 allocate 函数的结果,否则,则通过返回调用 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> 实例 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::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;