分配器中的每对象数据
Per-object Data in Allocators?
什么是"分配器中的每个对象数据"。我似乎不明白这是什么意思。有人能很好地解释或链接这在c++语言中意味着什么吗?
第19.4.2节"c++程序设计语言(特别版)"第573页
同样,如果允许分配器是完全通用的,那么允许分配器分配任意类型元素的rebind机制就必须更加精细。因此,假定标准分配器不保存每个对象的数据,标准容器的实现可以利用这一点。"单对象数据或局部状态指的是分配器类中的任何非静态数据成员。
问题是目前(在c++03
中)不支持具有所谓本地状态的分配器。这通常被认为是当前c++
中分配器模型的一个缺陷。
通读这篇详细介绍定制分配器设计的文章。Design下面的一段专门讨论了合并本地状态的分配器的一些缺陷。
简单地说,标准库中的一些操作目前要求特定类型的对象由分配器的一个实例安全地分配,然后由分配器的另一个实例安全地释放(当然,两个分配器是同一类型的!)例如,在实现list::splice
时就可能出现这种情况。如果允许分配程序具有本地状态,这可能会变得棘手…
在即将到来的c++0x
版本中,似乎将允许分配器合并本地状态,请查看这里的作用域分配器部分。
这仅仅意味着std::allocator<T>
不包含任何每个实例的数据成员…它主要是内存分配和释放函数的包装器,还包含某些必需类型的定义,以及重新绑定现有分配器的机制,以便它可以分配不属于原始分配器模板实例化的类型。因此,基本上所说的是,如果有实际的私有数据成员必须管理,特别是考虑到STL分配器允许重新绑定的要求,这可能会使通用分配器的实现变得非常复杂,具体取决于这些每个实例的数据成员表示什么。
相关文章:
- 使用指针访问数组中的对象数据成员
- 如果在 C++ 构造函数中以错误的顺序初始化对象数据,会发生什么类型的错误
- 只需调用对象即可获取对象数据
- 从R中访问C 对象数据成员
- C 如何将对象数据传递到用户定义的转换操作员中
- 通用B树,用于存储自定义对象/数据类型
- 通过指向对象数据成员的指针更改该对象的值
- C .更改对象数据成员的数据成员
- 排序类对象数据成员从大到小
- 从程序集中调用的C++方法返回对象数据
- 如何设置对象数据成员与这个c++与这个
- 访问私有对象数据时出现问题
- 流操作,用于以不同格式输出对象数据
- 更新标准::映射对象数据
- C++是保证在基本对象std::swap之后有效的派生对象数据
- 添加类的对象数据
- 将对象/数据从库传递到控制台应用程序(如何)
- 将一个对象数据复制到另一个相同类型 C++ 的对象
- 用c++将对象数据写入txt文件
- c++继承.更改对象数据类型