STL 空间配置器 allocator<一>
2017-12-23 21:32
344 查看
STL的操作对象(所有的数值)都存放在容器之中,而容器则需要配置空间以置放资料。最近在看侯捷的《STL源码剖析》,所以做了笔记。
一般意义上理解:
- 对象构造的分解: 对象内存开辟allocator | 对象构造 construct
- 对象析构的分解: 对象内存释放deallocate | 对象析构destroy
1.具备次配置力的SGI空间配置器
1.1 构造和析构:construct() 和 destroy()
为什么不说allocator是内存配置器而说他是空间配置器呢? 因为空间不一定是内存,空间也可以是磁盘或其他辅助存储介质。
一般意义上理解:
- 对象构造的分解: 对象内存开辟allocator | 对象构造 construct
- 对象析构的分解: 对象内存释放deallocate | 对象析构destroy
1.具备次配置力的SGI空间配置器
1.1 构造和析构:construct() 和 destroy()
/*构造construct*/ template <class T1, class T2> inline void construct(T1* p, const T2& value) { /*将初值value设定到指针所指空间上*/ /*p是一块已知内存*/ new (p) T1(value); // placement new 定位new } // destroy() 第1版本,接受1個指针。 template <class T> inline void destroy(T* pointer) { pointer->~T(); // 调用dtor ~T() } // 以下是 destroy() 第2版本,接受两个迭代器。此函式設法找出元素的數值型別, // 进而利用 __type_traits<> 求取最適當措施。 template <class ForwardIterator> inline void destroy(ForwardIterator first, ForwardIterator last) { __destroy(first, last, value_type(first)); } // 判斷元素的數值型別( value type)是否有 trivial destructor template <class ForwardIterator, class T> inline void __destroy(ForwardIterator first, ForwardIterator last, T*) { typedef typename __type_traits<T>::has_trivial_destructor trivial_destructor; __destroy_aux(first, last, trivial_destructor()); } // 如果元素的數值型別( value type)有 non-trivial destructor… template <class ForwardIterator> inline void __destroy_aux(ForwardIterator first, ForwardIterator last, __false_type) { for ( ; first < last; ++first) destroy(&*first); } // 如果元素的數值型別( value type)有 trivial destructor… template <class ForwardIterator> inline void __destroy_aux(ForwardIterator, ForwardIterator, __true_type) {} // 以㆘是 destroy() 第㆓版本針對迭代器為 char* 和 wchar_t* 的特化版 inline void destroy(char*, char*) {} inline void destroy(wchar_t*, wchar_t*) {}
相关文章推荐
- elasticsearch 学习博客系列<一> ES 的安装与配置
- mac spring redis环境配置<一>
- 路由器OSPF协议配置命令<一>
- Mac之OS系统下搭建JavaEE环境 <一> 之JDK的安装配置
- windows2003安全配置<一>
- WAS集群安装<一>系统环境配置和规划
- STL经典算法集锦<一>之list::sort
- VND无盘安装配置随记<一>
- Python机器学习实战<一>:环境的配置
- 标准模板库的空间配置器 STL's allocator
- 在spring中利用Guava实现本地Cache的具体配置 第一篇<一>
- STL分析-准备工作<一>
- VSFTP配置<一> ------ 匿名用户与系统用户配置详解
- 路由器RIP协议配置命令<一>
- <STL系列> 配置器
- ArcGIS server for java 安装配置<一>
- Cassandra<一>安装配置及常用命令
- hurlex <一> 开发环境配置中遇到问题
- 【STL】SGI空间配置器 Allocator
- 【spring】spring reference doc4.3.1 研读 <一>元数据配置以及Environment