构造和析构的基本工具

下面是<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){}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值