为什么allocator需要构造和销毁接口?

时间:2013-09-14 08:10:53

标签: c++ interface stl implementation allocator

stl中的默认分配器具有构造和销毁元素的接口。

void construct(pointer __p, const _Tp& __val)
void destroy(pointer __p)

但是stl还提供了两种功能来做同样的事情。这些函数在stl_construct.h中定义。

void _Construct(_T1* __p, const _T2& __value)
void _Destroy(_Tp* pointer)

我看到矢量模板使用_Construct和_Destroy而不是allocator中定义的接口。我的问题是为什么我们需要两组函数来做同样的事情?他们有什么区别吗?

1 个答案:

答案 0 :(得分:3)

_Construct_Destroy函数不是公共接口的一部分,而是您系统上特定标准库版本的实现细节。任何标有双下划线或单个下划线和大写字母的标识符都是保留的,用户不能调用。

将分配器的construct()destroy()成员函数委派给这些非成员函数是一种实现选择。顺便说一句,从C ++ 11开始,不再允许标准容器直接调用分配器的construct()destroy(),但必须通过std::allocator_traits<Allocator>类型特征来执行此操作。