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

问题描述 投票:0回答:2

在阅读了一篇关于花哨指针的非常深入的文章之后,其中还描述了它们与分配器的相关性,我有一个疑问。该论文涵盖了花哨指针的几个方面,但没有指定

FancyPtr
类型的两个不同特化是否需要具有相同的
difference_type
。延伸来说,我有以下问题:

给定分配器

A
和两个不同的专业化
std::allocator_traits<A>::rebind_alloc<T>
std::allocator_traits<A>::rebind_alloc<U>
size_type
difference_type
保证相同吗?

c++ c++11 allocator
2个回答
0
投票

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


0
投票

在C++中,C++标准库提供了内存管理分配器的概念。

rebind
机制用于将一种类型的分配器转换为另一种类型的分配器,确保分配器的
typedef
成员(如
size_type
difference_type
)适应新类型。

在大多数情况下,当您使用

rebind
使分配器适应不同类型时,反弹分配器的
size_type
difference_type
将保持与原始分配器相同。这是因为这些 typedef 通常依赖于分配器本身,而不是它分配的类型。

但是,C++ 标准并不强制要求

size_type
difference_type
在所有分配器专门化中必须相同,即使在重新绑定之后也是如此。这不是保证的行为。虽然
size_type
difference_type
在重新绑定后保持不变是很常见的,但在特定场景或自定义分配器中,这些类型可能会有所不同。

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

© www.soinside.com 2019 - 2024. All rights reserved.