SGI STL原代码分析之Vector(一)。

 STL版本有很多种,STL是一套泛型编程框架标准,只要实现了这套标准的东西,都是叫做STL。。  所以STL有很多版本,

但是SGI STL是最为标准,而且是STL之父写的所以是最为权威的STL模板。

目的:分析Vector构造到Push_back这一系列过程中,STL中的实现过程。

开干。。。~!!!!

SGI STL原代码分析之Vector(一)。

首先来到Vector这个类,Vector模板里面传递了两个参数,第一个是类型,是一个分配器,但是注意一下,这里传递进来的分配是有一个宏。我们先来看下这个宏的结构。

SGI STL原代码分析之Vector(一)。

这个宏是用来控制分配器类型的。让我们继续看回我们的vetor中,发现,Vector是继承自父类Vector_Base的,我们来研究他的Vector_Base。

Vector_Base中首先来看它中间的三个保护权限的三个参数

SGI STL原代码分析之Vector(一)。

这里要说两个问题,第一, 为什么要设置成Proctected,第二,这三个参数是什么意思。

先来说第一个问题,为什么要设置成Proctected,因为想让子类继承后也可以访问。

SGI STL原代码分析之Vector(一)。

这是在继承了Base的Vector里面找到的,这里定义了一个宏,还有一个using的用法,在后续来说明。

第二个问题,这三个参数是什么意思。

SGI STL原代码分析之Vector(一)。

我不知道怎么准确描述,所以画了个图,, 大家自己看吧,挺形象的。

继续分析。!!~接下来我们来看都是怎么初始化这三个参数的吧。

SGI STL原代码分析之Vector(一)。

这里仔细看下这些画了红色的,标记,这里发现用了一个模板类进来,simple_alloc<_Tp, _Alloc>,并且给它传递了两个参数,分别是类型_Tp和_Alloc进去,并且在构造函数中调用的方法也是来自这个simple_alloc<_Tp, _Alloc>。所以,接下来当然就是来看看看这个模板类的实现了。。。 


#分配器:在我们的 _Base 类中, 我们知道存在 分配内存 和 释放内存 两个方法, 这两个方法存在于 simple_alloc 这个类中.
这个类位于 stl_alloc.h 中.

SGI STL原代码分析之Vector(一)。

在STL中,内存的分配和释放都是来自分配器的。在构造函数中只是调用了分配器中分配内存的方法而已。。 到这里为止,VecetorBase里面的内容就到此结束了。。 下面放上Base里面的代码详解。

SGI STL原代码分析之Vector(一)。

总结:

1.Vector类中是没有构造函数的,而函数的构造是来自VectorBase。

2.VectorBase中在构造函数的时候分为两种情况 NO.1 不指定构造的大小长度。 No.2 指定了构造的大小。

3.VectorBase在指定了生成的大小的时候会调用分配器中的方法,来分配空间。

4.由上可知,在分配器中做的只是内存的分配和释放,而方法的构造是在VctorBase当中完成的,所以可以这样来看,

分配器,在STL架构中只是相当于实现operator new 和 operator delete 这样的操作,new operator=operator new+place new 所以,Vectorbase在这里做的是Place new 的操作。



VectorBase就分析到这里了。。跑路咯~!!!!!^_^