为什么 rebind<U>::other 在 C++17 中被弃用并在 C++20 中被删除?

das*_*fex 3 c++ allocator c++17 c++20

我知道它仅在 std::allocator 中被弃用和删除。我可以在我自己的分配器上实现它。但为什么它被弃用了呢?

Nic*_*las 8

rebind是一种笨重的 C++11 之前的方法,用于获取 的分配器类型T并将其转换为 的分配器类型U。我说“C++11 之前”是因为 C++11 为我们提供了一种更方便的方法:模板别名。

allocator_traitstemplate 有一个成员模板别名rebind<U>,用于计算Allocator<U>它所属的分配器。rebind如果分配器的成员可用,它可以使用它,否则,它只会产生Allocator<U>

allocator_traits有效地定义了许多std::allocator过去提供的功能。这使得许多成员变得std::allocator多余,因此它们已被弃用并删除,取而代之的是traits基于 - 的默认值。

  • 强调一下:`allocator_traits` 是在 C++11 中引入的,需要这些新的语言功能才能工作。 (2认同)