目前在学习STL,看到一个开源的项目MyTinySTL,非常不错。想着照着这个代码自己敲一遍应该也能有些进步。然后就开始了学习过程。
首先分析的是vector
以下是由vector.h关联的所有头文件
这里分析一下allocator.h 和 相关的construct.h
construct.h文件中,
首先要了解一下std::is_trivially_destructible, 这个函数判断模板参数是否有一个微不足道的析构函数(trivially,微不足道,即不重要)
对于一些简单的基本类型,他们没有析构函数,那这个std::is_trivially_destructible::value 就是true,如果有正常的析构函数,则为false
construct.h中定义了construct 函数和destroy,其中construct函数中使用了place_new 的构造方式,
介绍一下place new: 简单来说就是在一个已经分配好的内存空间上直接调用构造函数,在那个空间上构造出一个对象来,省去了拷贝或者移动的麻烦,效率较高
destroy 函数分别调用了destroy_one(析构一个对象) 和 destroy_cat(析构一些对象),
只有传入的is_trivially_destructible为false的时候,才会去调用对应的析构函数(是不重要的吗? false,不是,那就表示重要的)
=================================
allocator.h文件
这个文件中定义了allocator类,该类主要定义了四个函数,allocate deallocate, construct, destroy
前两个函数分别调用new 和 delete, 后面两个调用了construct.h中的对应的construct 和 destroy 函数