阅读侯捷的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,先放着吧

最新文章

  1. Apworks框架实战(五):EasyMemo的领域模型设计
  2. 在MotionBuilder中绑定C3D动作和模型
  3. 基于Quartz.NET构建自己的动态作业调度器
  4. jquery autocomplete
  5. 【转】Profiling application LLC cache misses under Linux using Perf Events
  6. Gartner报告:多数CIO还未对数字化做好准备
  7. pandas库学习笔记(一)Series入门学习
  8. bzoj 2190 仪仗队(欧拉函数)
  9. BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 LCT
  10. HDU-1166-敌兵布阵(线段树)
  11. 安装python虚拟环境
  12. Linux多线程编程详细解析----条件变量 pthread_cond_t
  13. RE:1054652545 - 论自己是如何蠢死的
  14. Java-Maven(四):Eclipse集成Maven环境配置
  15. 1020. Tree Traversals (25) -BFS
  16. &lt;3&gt;Centos系统完整安装python流程
  17. 关于JS数组的栈和队列操作
  18. c# 控件的基类——Control
  19. html (第四本书第五章参考)
  20. sencha touch Container tpl 监听组件插件(2013-9-14)

热门文章

  1. 快速安装pycharm,最详细的pycharm安装图文教程
  2. Cocos2d-X多线程(1) 在cocos2d-x中使用多线程
  3. centos 防火墙 iptables firewalld SELinux
  4. C中的异常处理
  5. Python Set intersection() 方法
  6. 编号001:deque用法暂时总结
  7. Jquery复习(八)之遍历
  8. ORA-01846: 周中的日无效
  9. Coursera机器学习笔记(一) - 监督学习vs无监督学习
  10. 从HTTP request的body中拿到JSON并反序列化为一个对象