在查看std::allocator时,我看到成员:
value_type
,
pointer
,
const_pointer
,
reference
,
const_reference
,
size_type
,
difference_type
,和
rebind
已全部弃用。
分配者也将不再拥有成员:
address
,max_size
,construct
或destroy
。
为什么会这样?它与多态分配器有关吗?
答案 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;
所以,总而言之,它是标准图书馆追赶语言和范式的转变。