最好不要直接调用std :: allocator的成员函数吗?

时间:2014-07-04 05:57:40

标签: c++ memory-management standards typetraits allocator

据我所知,符合标准的容器总是使用

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)被称为?

1 个答案:

答案 0 :(得分:1)

从不,在C ++ 11代码中。 std::allocator在C ++ 98中定义为具有名为address的成员函数,因此必须保持其向后兼容性。 C ++ 98没有allocator_traits

当委员会为C ++ 11引入allocator_traits时,它最初有一个address成员,但后来被采用N2982删除了。该论文中的相关讨论说:“address的功能现在由pointer_to中的pointer_traits函数提供。”