STL::allocator rebind
2024-10-07 06:19:07
阅读侯捷的STL源码剖析时,发现在allocator类的代码中有这样一个struct
template<class T>
class allocator
{
...
template<class U>
struct rebind
{
typedef allocator<U> other;
};
...
};
起初觉得很申必,因为无论是注释还是后续的代码中都没有提到此rebind。后来百度了一下知道了其实际意义,记录一下。
rebind的意义就在于实现两个不同但两者互相有关的类型(比如类型T和Node<T>类型),使用同一种内存分配方法。
如果抛开rebind不提,想要实现上述的意义,容器必须要让allocator是同一个模板,问题就出在容器并不关心你的allocator是怎么写的,他唯一有关的就是在声明时在template中写alloc = allocator<T>,只知道模板参数名allocator,而不知道其具体实现,导致没有办法让T与U的allocator是同一个。
于是在allocator<T>中创建一个U的allocator,标准中有这样的规定:
对于allocator<T>与一个类型U,allocator<U>与allocator<T>::rebind<U>::other是等价的。
在想使用allocator<U>的时候就需要使用allocator<T>::rebind<U>::other,否则就是用了一个别的allocator了。
//todo:之后可能会补个rebind的范例,或者是单独的写个blog,先放着吧
最新文章
- Apworks框架实战(五):EasyMemo的领域模型设计
- 在MotionBuilder中绑定C3D动作和模型
- 基于Quartz.NET构建自己的动态作业调度器
- jquery autocomplete
- 【转】Profiling application LLC cache misses under Linux using Perf Events
- Gartner报告:多数CIO还未对数字化做好准备
- pandas库学习笔记(一)Series入门学习
- bzoj 2190 仪仗队(欧拉函数)
- BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 LCT
- HDU-1166-敌兵布阵(线段树)
- 安装python虚拟环境
- Linux多线程编程详细解析----条件变量 pthread_cond_t
- RE:1054652545 - 论自己是如何蠢死的
- Java-Maven(四):Eclipse集成Maven环境配置
- 1020. Tree Traversals (25) -BFS
- <;3>;Centos系统完整安装python流程
- 关于JS数组的栈和队列操作
- c# 控件的基类——Control
- html (第四本书第五章参考)
- sencha touch Container tpl 监听组件插件(2013-9-14)