回弹分配器的 size_type 和 difference_type 是否相同?

4
阅读了一篇关于高级指针的深入文章后,其中还描述了它们与分配器的相关性,我有一个疑问。这篇论文涵盖了高级指针的几个方面,但没有明确指出两个不同的类型的特化是否需要具有相同的。由此延伸,我有以下问题:
给定一个分配器A和两个不同的特化,std::allocator_traits::rebind_alloc和std::allocator_traits::rebind_alloc,是否保证和是相同的?

一篇非常深入的关于高级指针的文章 - 你能给我提供那篇文章的链接吗? - Evg
1
@Evg,这是一个提案,题为《朝着有意义的花哨指针》(Towards meaningful fancy pointers)。然而,一些博客将其作为参考,以提供更深入的洞察力关于花哨指针。 - LoS
2个回答

2
C++标准库提供了分配器(allocators)的概念来进行内存管理。使用"rebind"机制可以将一个类型的分配器转换为另一个类型的分配器,确保适应新类型的分配器的"typedef"成员(如"size_type"和"difference_type")被调整。
在大多数情况下,当使用"rebind"将分配器调整到不同类型时,重新绑定后的分配器的"size_type"和"difference_type"将保持与原始分配器相同。这是因为这些类型定义通常依赖于分配器本身,而不是其分配的类型。
然而,C++标准并不要求在所有分配器特化中,即使重新绑定后,"size_type"和"difference_type"必须保持相同。这不是被保证的行为。虽然"size_type"和"difference_type"在重新绑定后保持相同是常见的,但在特定情况下或使用自定义分配器时,这些类型可能会有所不同。

如果您想确保特定分配器或高级指针的行为,请参考该特定分配器或指针类型的文档。始终依赖于您正在使用的库或框架所提供的文档和规范,因为可能存在实现特定的差异或变化。


0
不,我在标准中没有看到任何这样的要求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接