tiny_stl: :allocator——construct

空间适配器allocator有两部分操作,一个是空间配置和释放,另一个就是构造和析构。相比复杂的内存分配,构造器的实现要轻松得多,因为它本质上完成了构造对象的一些对接工作,并未真正的碰到内存数据。

构造器construct()只做了一件十分简单的事,即将指针和值关联起来,值存在于一个地址空间,指针是我们用类型关键字声明的,construct只需要让指针指向这个空间就可以了,这个操作可以由placement new运算子来完成,具体代码如下:

template<class T1, class T2>
void construct(T1 *ptr1, const T2& value)
{
	new (ptr1) T1(value);
}

关于析构函数的实现,由于要考虑到标准类型和自定义类型的析构方式不同,要用到特性萃取来获取POD特性。判断出类型不是标准布局类型时,以迭代器的方式遍历和释放,以此泛化析构方法。

template<class T>
void destroy(T *ptr)
{
	ptr->~T();
}

template<class ForwardIterator>
void _destroy(ForwardIterator first, ForwardIterator last, _true_type) {}

template<class ForwardIterator>
void _destroy(ForwardIterator first, ForwardIterator last, _false_type)
{
	for (; first != last; first++)
	{
		destroy(&*first);
	}
}
	template<class ForwardIterator>
void destroy(ForwardIterator first, ForwardIterator last)
{
	typedef typename _type_traits<ForwardIterator>::is_POD_type is_POD_type;
	_destroy(first, last, is_POD_type());
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值