提问人:LoS 提问时间:8/30/2023 更新时间:8/30/2023 访问量:81
反弹分配器是否具有相同的size_type和difference_type?
Do rebound allocators have the same size_type and difference_type?
问:
在阅读了一篇关于花哨指针的非常深入的文章后,其中还描述了它们与分配器的相关性,我对此表示怀疑。本文涵盖了花式指针的几个方面,但没有具体说明一种类型的两个不同专业化是否需要具有相同的 .推而广之,我有以下问题:FancyPtr
difference_type
给定一个分配器和两个不同的专业化,和 ,是否保证相同?A
std::allocator_traits<A>::rebind_alloc<T>
std::allocator_traits<A>::rebind_alloc<U>
size_type
difference_type
答:
不,我在标准中没有看到任何此类要求。
C++ 标准库提供了用于内存管理的分配器的概念。该机制用于将一种类型的分配器转换为另一种类型的分配器,从而确保分配器的成员喜欢并适应新类型。rebind
typedef
size_type
difference_type
在大多数情况下,当您用于使分配器适应其他类型时,回弹分配器的 和 将与原始分配器相同。这是因为这些 typedef 通常依赖于分配器本身,而不是它分配的类型。rebind
size_type
difference_type
但是,C++ 标准并不强制要求,并且必须在所有分配器专用化中相同,即使在重新绑定之后也是如此。这不是保证的行为。虽然重新绑定后保持不变很常见,但在某些特定方案或自定义分配器中,这些类型可能会有所不同。size_type
difference_type
size_type
difference_type
如果要确保特定分配器或花哨指针的行为,则应参考该特定分配器或指针类型的文档。始终依赖您正在使用的库或框架提供的文档和规范,因为可能存在特定于实现的差异或变体。
评论