分配器中的每对象数据?

时间:2011-08-13 03:37:23

标签: c++ stl

什么是“分配器中的每个对象数据”。我似乎无法找到这意味着什么。任何人都有一个很好的解释或链接,这对于C ++语言意味着什么?


澄清

第19.4.2节“C ++编程语言(特别版)”第2页。 573

“同样,如果允许分配器完全通用,那么允许分配器分配任意类型元素的重新绑定机制必须更加精细。因此,假定标准分配器不保留每个对象的数据,标准容器的实现可以利用它。“

2 个答案:

答案 0 :(得分:5)

每个对象数据或本地状态是指分配器类中的任何非静态数据成员。

问题是目前(在c++03中)不支持具有所谓本地状态的分配器。这通常被认为是当今c++中分配器模型的缺陷。

阅读详细说明自定义分配器设计的this文章。 Design 下的一个段落专门解决了包含本地状态的分配器的一些缺陷。

简而言之,标准库中的某些操作当前要求特定类型的对象由分配器的一个实例安全地分配,并由分配器的另一个实例解除分配(两个分配器当然都是相同的类型!)。例如,在实施list::splice时就是这种情况。如果允许分配器具有本地状态,这可能会变得棘手......

在即将发布的c++0x版本中,似乎允许分配器合并本地状态,请查看作用域分配器部分here

希望这有帮助。

答案 1 :(得分:1)

它只是意味着std::allocator<T>不包含任何每个实例的数据成员......它主要是内存分配和释放函数的包装器,还包含某些必需的typedef的定义,以及重新绑定现有分配器,以便它可以分配不属于原始分配器模板实例的类型。所以基本上所说的是,如果有必须进行管理的实际私有数据成员,特别是考虑到STL分配器允许重新绑定的要求,这可能会极大地使通用分配器的实现复杂化,具体取决于那些每个实例数据成员代表。