反弹分配器是否具有相同的size_type和difference_type?

Do rebound allocators have the same size_type and difference_type?

提问人:LoS 提问时间:8/30/2023 更新时间:8/30/2023 访问量:81

问:

在阅读了一篇关于花哨指针的非常深入的文章后,其中还描述了它们与分配器的相关性,我对此表示怀疑。本文涵盖了花式指针的几个方面,但没有具体说明一种类型的两个不同专业化是否需要具有相同的 .推而广之,我有以下问题:FancyPtrdifference_type

给定一个分配器和两个不同的专业化,和 ,是否保证相同?Astd::allocator_traits<A>::rebind_alloc<T>std::allocator_traits<A>::rebind_alloc<U>size_typedifference_type

C++ C++11 分配器

评论

0赞 Evg 8/30/2023
一篇关于花哨指针的非常深入的文章 - 你能提供该文章的链接吗?
1赞 LoS 8/30/2023
@Evg,这是一个建议,走向有意义的花哨指针。但是,它被一些博客用作参考,以提供对花哨指针的更多见解。

答:

0赞 user17732522 8/30/2023 #1

不,我在标准中没有看到任何此类要求。

2赞 Alain Paulin Niyonkuru 8/30/2023 #2

C++ 标准库提供了用于内存管理的分配器的概念。该机制用于将一种类型的分配器转换为另一种类型的分配器,从而确保分配器的成员喜欢并适应新类型。rebindtypedefsize_typedifference_type

在大多数情况下,当您用于使分配器适应其他类型时,回弹分配器的 和 将与原始分配器相同。这是因为这些 typedef 通常依赖于分配器本身,而不是它分配的类型。rebindsize_typedifference_type

但是,C++ 标准并不强制要求,并且必须在所有分配器专用化中相同,即使在重新绑定之后也是如此。这不是保证的行为。虽然重新绑定后保持不变很常见,但在某些特定方案或自定义分配器中,这些类型可能会有所不同。size_typedifference_typesize_typedifference_type

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