条目十《了解分配子(allocator)的约定和限制》

在STL标准库中,分配子的存在有点怪异。

一开始的设计意图是提供一个内存模型的抽象,让使用库者库忽略操作系统的near指针和far指针问题。但此目的没有达到。另一个目的是为了有利于开发作为对象形式存在的内存管理器。

从书中的这句话,其实我咋一看下去是比较模糊。细细琢磨,stl中的allocator就是发育畸形了,没有按照本意来发育,成为了另外一种存在。

在多数标准容器中,没有从它们的分配子allocator分配内存。

** 分配子注意什么? **

  • 1.可移植的分配子不能有任何非静态的数据成员。(这样的分配子不是等价的,在运行时会破坏数据结构)
  • 2.确保分配子是等价的

编写自定义的分配子,需要:

  • 1.把分配子写成模板形式,模板参数T代表待分配内存的对象的类型
  • 2.提供类型定义pointer和reference,始终让pointer为T*,reference为T&
  • 3.分配子不能拥有随对象不同的状态。即,分配子不能有非静态数据成员
  • 4.记住分配子的allocate成员函数申请的是待分配内存的对象的对象个数,不是字节数。这些函数返回T*指针。
  • 5.必须提供嵌套的rebind模板,因为标准容器以来该模板。

参考:

《Effective STL》

最新文章

  1. 有哪些经常被误用的 HTML、JavaScript、CSS 的元素、方法和属性?
  2. PHP工作笔记:yii2各种功能汇总
  3. kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
  4. ember.js学习笔记
  5. STL源码--Allocator学习
  6. 软件工程 speedsnail 冲刺5
  7. JSP---演示ErroPage、isErroPage和jsp:forword标签
  8. 什么是马甲APP?怎么用马甲APP导流
  9. Linux下安装GAMS建模优化工具
  10. Spring读书笔记-----Spring的Bean之设置Bean值
  11. java打印菱形的简单方法
  12. Xshell学习--菜鸟篇
  13. BZOJ3223/洛谷P3391 - 文艺平衡树
  14. MongoDB 分片键的选择与案例
  15. Mockito框架入门教程(一)
  16. SVN添加用户
  17. yii2 支付宝支付教程 [ 2.0 版本 ]
  18. vs2015 + Python3.5 环境搭建
  19. Log4j 日志记录
  20. 微信JSSDK接口previewImage

热门文章

  1. java游戏制作之水果忍者
  2. 判断Android系统net和wap接入点的开发实例
  3. Python和其他语言的区别 (简单精辟啊 手打)
  4. 解决nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
  5. 编写高质量代码改善C#程序的157个建议——建议9: 习惯重载运算符
  6. MySQL性能调优与架构设计——第2章 MySQL架构组成
  7. SNMP协议学习笔记
  8. .net Stream篇(六)
  9. C# web通信解决方案
  10. C#转java