为什么 std::allocator 在 C++17 中失去成员 types/functions?

Why did std::allocator lose member types/functions in C++17?

在查看 std::allocator 时,我看到成员:
value_type, pointer, const_pointer, reference, const_reference, size_type, difference_type, 和 rebind 已全部弃用。

分配器也将不再有成员:
addressmax_sizeconstructdestroy

为什么会这样?它与多态分配器有关吗?

如果你看the relevant isocpp paper you can see that the first set you mention is now thought to be better placed in std::allocator_traits。自从 STL(甚至不是标准库)问世以来,更多的是使用特征。

rebind也是遗物。 STL刚出来的时候,不支持别名和template-template参数。有了这些语言特性,rebind 看起来相当复杂。例如,正如您在 an answer to this question 中看到的,在 The C++ Programming Language,第 4 版,第 34.4.1 节,p. 998,在默认分配器 class 中评论 'classical' 重新绑定成员:

template<typename U>
     struct rebind { using other = allocator<U>;};

Bjarne Stroustupr 写道:“奇怪的重新绑定模板是一个古老的别名。它应该是:

template<typename U>
using other = allocator<U>;

但是,分配器是在 C++ 支持此类别名之前定义的。"

所以,总的来说,标准库赶上了语言和范式的转变。