下面是<stl_construct.h>的部分内容
//下面是<stl_const.h>的部分内容
#include<new.h>
template<class T1,class T2>
//接受一个指针 p,和一个初值value,它的作用就是将初值设定到指针所指的空间上
inline void construct (T1* p,const T2 & value){
new (p) T1(value);//调用T1::T1(value)
}
//以下是destroy()的第一个版本,接受一个指针
template<class T>
//传入一个指针 将这个指针所指的空间析构掉
inline void destroy(T* pointer){
pointer->~T();
}
//以下是destroy的第二个版本
//利用__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_tratis<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<las;++first)
destroy(&*first);//调用第一个版本的析构函数
}
//如果元素的数值型别(value type)有 trivial destructor 就是说有那么不重要的析构函数
template<class ForwardIterator>
//此时什么也不做
inline void __destroy_aux(ForwardIterator,ForwardIterator,__true_type){}