几个关键点
此书的几个关键点:
1.清楚STL的六大组件和相互间的关系(P4);
2.allocator的二级配置器的memory pool,free lists机制;
3.Iterator的Traits机制!设计得相当精妙,是partial specialization的一个好例子——用partial specialization来实现对原生类型指针所指类型的提取。
__type_traits:用total specialization来实现提取triavial XX类型(了解一下就行)。
==================================================
注:triavial指编译器合成的但对类实现上无意义的函数。
举个例子来说,如果一个class没有定义destructor,如果这个class中的一个数据成员拥有destructor,那么编译器会自动合成出这个class的destructor来.在这个class的合成的destructor里调用那个数据成员的destructor,这个合成的class的destructor是有意义的,即是non-trivial的
.
如果这个class没有上述的那种数据成员,那么编译器并不会合成出一个destructor来,这时,可以“理解”为这个destructor是trivial的,当然实际上destructor是不存在的.
==================================================
4.容器方面,重点掌握vector,deque,rb-tree,hashtable。这几个的实现都可以好好看看,都是很优秀的代码;
5.算法中copy的实现比较复杂,根据容器的种类做了很多优化。
6.仿函数和适配器都很简单。仿函数就是用operator()重载,实现将函数伪装成类。适配器中除了常见的container adapters,还有不是很常用但实际上 很有用的iterator adapter和function adapter。
先就看了这几个自己觉得比较重要的点。以后有时间在细看其他的吧。
1.清楚STL的六大组件和相互间的关系(P4);
2.allocator的二级配置器的memory pool,free lists机制;
3.Iterator的Traits机制!设计得相当精妙,是partial specialization的一个好例子——用partial specialization来实现对原生类型指针所指类型的提取。
__type_traits:用total specialization来实现提取triavial XX类型(了解一下就行)。
==================================================
注:triavial指编译器合成的但对类实现上无意义的函数。
举个例子来说,如果一个class没有定义destructor,如果这个class中的一个数据成员拥有destructor,那么编译器会自动合成出这个class的destructor来.在这个class的合成的destructor里调用那个数据成员的destructor,这个合成的class的destructor是有意义的,即是non-trivial的
.
如果这个class没有上述的那种数据成员,那么编译器并不会合成出一个destructor来,这时,可以“理解”为这个destructor是trivial的,当然实际上destructor是不存在的.
==================================================
4.容器方面,重点掌握vector,deque,rb-tree,hashtable。这几个的实现都可以好好看看,都是很优秀的代码;
5.算法中copy的实现比较复杂,根据容器的种类做了很多优化。
6.仿函数和适配器都很简单。仿函数就是用operator()重载,实现将函数伪装成类。适配器中除了常见的container adapters,还有不是很常用但实际上 很有用的iterator adapter和function adapter。
先就看了这几个自己觉得比较重要的点。以后有时间在细看其他的吧。
有关键情节透露