SGI-STL简记-构造类型萃取特性未初始化解析
Posted haomiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SGI-STL简记-构造类型萃取特性未初始化解析相关的知识,希望对你有一定的参考价值。
stl_construct.h : 提供多种构造器、销毁器模板函数; 构造器construct提供了给定值构造和默认构造方式,通过调用重载函数_Construct实现; 销毁器destroy提供了销毁指针和迭代器的方式,通过调用重载函数_Destroy实现; _Construct:通过“放置”new,构造实现; _Destroy:通过调用模板类型对象析构函数实现,对于迭代器器方式,则通过__destroy(内部通过__destroy_aux)遍历销毁,因内置数据类型不需要销毁, 故内部需要判断是否为内置类型,对非内置类型则调用对应类型的析构函数即可,否则不处理; __destroy_aux:重载的模板类,通过__false_type或__true_type确定是否为可隐式销毁的对象; 此外_Destroy因普通内置类型的指针也可作为迭代器,故又重载了各个基本类型的处理(不处理); type_traits.h : 类型萃取、特性; 两个特殊类型__true_type、__false_type,一般作为某些模板参数的识别的标识,如上面的__destroy_aux; __type_traits:类型特性萃取模板类,其中has_trivial_default_constructor、has_trivial_copy_constructor、has_trivial_assignment_operator、 has_trivial_destructor、is_POD_type分别表示为隐式默认构造、拷贝构造、赋值操作、隐式析构、是否为原内置类型,默认情况下均为__false_type; 其他的__type_traits特化版本均为内置类型(如:int,bool,float,...,char *等)均为__true_type, _Is_integer:模板函数,是否为整型(或可转化为整型的类型(如:int, unsigned char, short, long long ...)),其中_Integral在其他情况默认为__false_type; 当为整型类型时,为__true_type; 此外还有各个组件中基本上都会用到的类型重声明: typedef size_t size_type; typedef ptrdiff_t difference_type; typedef _Tp* pointer; typedef const _Tp* const_pointer; typedef _Tp& reference; typedef const _Tp& const_reference; typedef _Tp value_type; stl_uninitialized.h : 初始化填充、拷贝: uninitialized_copy:目前提供3个重载版本,其中两个分别对char*、wchar_t*数据类型直接调用memmove内存拷贝,另一个提供迭代器范围拷贝,其通过 __uninitialized_copy处理,内部获取结果前向迭代器的内容指针类型并再次调用__uninitialized_copy_aux;__uninitialized_copy_aux内部通过萃取 内容指针类型是否为is_POD_type,实现分别处理不同的内容,若为原始POD则内部直接调用copy即可,否则遍历迭代器并分别调用_Construct构造,若失败 抛出了异常则调用_Destroy析构之前已成功构造的对象,此外根据迭代器不同,有不同的迭代策略; uninitialized_copy_n:同uninitialized_copy,提供了拷贝个数的参数; uninitialized_fill、uninitialized_fill_n:类型于uninitialized_copy与uninitialized_copy_n;原始POD类型通过fill填充,否则遍历迭代调用_Construct构造, 若失败抛出了异常则调用_Destroy析构之前已成功构造的对象,此外根据迭代器不同,有不同的迭代策略;
以上是关于SGI-STL简记-构造类型萃取特性未初始化解析的主要内容,如果未能解决你的问题,请参考以下文章