STL::allocator rebind
阅读侯捷的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,先放着吧
STL::allocator rebind的更多相关文章
- [转载]浅析STL allocator
本文转载自水目沾博客:http://www.cnblogs.com/zhuwbox/p/3699977.html 向大师致敬 一般而言,我们习惯的 C++ 内存配置操作和释放操作是这样的: 1 c ...
- 浅析STL allocator
一般而言,我们习惯的 C++ 内存配置操作和释放操作是这样的: class FOO{}; FOO *pf = new FOO; delete pf; 我们看其中第二行和第三行,虽然都是只有一句,当是都 ...
- STL Allocator
从上面这个程序可以看出,我们这里手动使用了分配器,分配器有很多种类,有std::,还有非std::,也就是上面的__gnu_cxx下面的,我们在使用容器的时候不关心我们使用什么分配器,也不关心我们如何 ...
- STL源码分析读书笔记--第二章--空间配置器(allocator)
声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...
- STL源码剖析 — 空间配置器(allocator)
前言 以STL的实现角度而言,第一个需要介绍的就是空间配置器,因为整个STL的操作对象都存放在容器之中. 你完全可以实现一个直接向硬件存取空间的allocator. 下面介绍的是SGI STL提供的配 ...
- STL学习笔记:空间配置器allocator
allocator必要接口: allocator::value_type allocator::pointer allocator::const_pointer allocator::referenc ...
- 侯捷STL课程及源码剖析学习2: allocator
以STL 的运用角度而言,空间配置器是最不需要介绍的东西,它总是隐藏在一切组件(更具体地说是指容器,container)的背后,默默工作默默付出. 一.分配器测试 测试代码 #include < ...
- STL 之 空间配置器(allocator)
一.SGI 标准的空间配置器,std::allocator SGI也定义了一个符合部分标准,名为allocator的配置器,但是它自己不使用,也不建议我们使用,主要原因是效率不佳. 它只是把C++的操 ...
- STL——空间配置器(构造和析构基本工具)
以STL的运用角度而言,空间配置器是最不需要介绍的东西,它总是隐藏在一切组件(更具体地说是指容器,container)的背后,默默工作,默默付出.但若以STL的实现角度而言,第一个需要介绍的就是空间配 ...
随机推荐
- Centos7的引导顺序
1.UEFI或BIOS初始化,运行POST开机自检(Power On Self Test) 2.选择启动设备 3.引导装载程序grub2 4.加载装载程序的配置文件:/etc/grub.d/ ...
- Fuzzy logic
Fuzzy logic is used in artificial intelligence. In fuzzy logic, a proposition has a truth value that ...
- LoadRunner对sockets报文进行压力测试(脚本设计)
1. LR新建一个windows sockets项目 2. action中写入测试代码 如: #include "lrs.h" Action() { char *recvbuf; ...
- C++ 多文件编译简述:头文件、链接性、声明与定义
目录 Commen Sense 头文件 链接性 static 与链接性控制 extern 与外部链接性 Reference Commen Sense C++ 在编译时对每个翻译单元(Translati ...
- spring boot-6.profile 多环境支持
在正式项目中一般都会区分多个环境,一般至少分为开发环境,测试生产环境,生产环境,实际可能会有更加精细的区分,针对不同的环境,项目的配置可能需要切换,spring boot 提供了很方便的环境切换方式. ...
- Mybatis(二) SQL映射文件
SQL映射文件 单条件查询 1. 在UserMapper接口添加抽象方法 //根据用户名模糊查询 List<User> getUserListByName(); 2. 在UserMappe ...
- linux项目运行环境搭建
# 命令查看可修改分辨率 xrandr # 选择要修改的分辨率 xrandr -s 1360x768# 删除文件命令 rm -rf 文件名/ # XShell工具进行远程连接了 sudo apt ...
- python-day25(正式学习)
目录 组合 多态 多态性 好处 封装 两个层面 property 组合 组合就是一个类的对象具备某一个属性,该属性的值是指向另外外一个类的对象 组合是用来解决类与类之间代码冗余的问题 首先我们先写一个 ...
- PostgreSQL-pg_ctl
命令简介 pg_ctl 启动.关闭.重启 postgres pg_ctl start [-w] [-s] [-D datadir] [-l filename] [-o options] [-p pat ...
- 9.jQuery之简洁版滑动下拉菜单
知识点:hover的使用,已经slideToggle的切换效果 <style> * { margin: 0; padding: 0; } li { list-style-type: non ...