为什么std :: allocator在C ++ 17中丢失成员类型/函数?

时间:2016-07-25 10:30:41

标签: c++ memory-management stl allocator c++17

在查看std::allocator时,我看到成员:
value_typepointerconst_pointerreferenceconst_referencesize_typedifference_type,和 rebind已全部弃用。

分配者也将不再拥有成员:
 addressmax_sizeconstructdestroy

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

1 个答案:

答案 0 :(得分:14)

如果您查看the relevant isocpp paper,您可以看到您提到的第一套现在被认为更适合std::allocator_traits。由于STL(甚至不是标准库)问世,所以更多的是转向使用特征。

rebind也是一个遗物。当STL首次出现时,不支持别名和模板模板参数。有了这些语言功能,rebind似乎相当复杂。例如,正如您在an answer to this question中所见,“C ++编程语言”第4版第34.4.1节,p。 998,评论经典'在默认分配器类中重新绑定成员:

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

Bjarne Stroustupr写道:&#34;好奇的重新绑定模板是一个古老的别名。应该是:

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

但是,在C ++支持这些别名之前定义了分配器。&#34;

所以,总而言之,它是标准图书馆追赶语言和范式的转变。