据我所知,符合标准的容器总是使用
std::allocator_traits<allocator_type>
执行allocate / deallocate / construct / destroy操作,而不是直接调用allocator_type
的成员函数。
如果是的话。 std::allocator<T>
类似于
std::allocator_traits<std::allocator<T>>
,那么在什么情况下
std::std::allocator<T>::address(reference)
被称为?
答案 0 :(得分:1)
从不,在C ++ 11代码中。 std::allocator
在C ++ 98中定义为具有名为address
的成员函数,因此必须保持其向后兼容性。 C ++ 98没有allocator_traits
。
当委员会为C ++ 11引入allocator_traits
时,它最初有一个address
成员,但后来被采用N2982删除了。该论文中的相关讨论说:“address
的功能现在由pointer_to
中的pointer_traits
函数提供。”