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 == 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;