为什么分配器需要构造和销毁接口
Why does allocator need construct and destroy interface?
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 而不是分配器中定义的接口。我的问题是为什么我们需要两组函数来做同样的事情?他们有什么区别吗?
_Construct
和 _Destroy
函数不是公共接口的一部分,而是系统上特定标准库版本的实现细节。任何带有双下划线或单个下划线和大写字母的标识符都是保留的,用户不会调用。
将分配器的construct()
和destroy()
成员函数委托给这些非成员函数是一种实现选择。顺便说一句,从 C++11 开始,标准容器不再被允许直接调用分配器的construct()
和destroy()
,而必须通过 std::allocator_traits<Allocator>
类型特征来实现。
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- Visual C++GC接口如何启用它以及要包含哪个库
- 当有分配器意识的容器被复制/移动时,反弹分配器是否被复制/移走
- Windows.h与GLFW.h的接口
- 将 std::allocate_shared 与多态资源分配器一起使用
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 提供与TMP和SFINAE的通用接口
- 为重写std::exception的库生成swig接口时出错
- 内联如何影响模块接口中的成员函数
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- COM 接口 c# 封送数组数组
- 如何在 SCIP C++ 接口中获取 MILP 约束矩阵中的系数值
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 如何绑定 C++ gRPC 客户端的网络接口
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 如何从实现接口的模板化类实例访问结构
- 带有进度表的 curl 多接口程序
- 为什么STL保留分配器的接口
- 为什么分配器需要构造和销毁接口