stl五个内存基本处理工具

4 篇文章 0 订阅

stl定义的五个全局函数,作用于未初始化空间,便于容器的实现。包括contruct(), destroy()和uninitialized_copy(), uninitialized_fill(), uninitialized_fill_n,后面三个分别对应于高层次函数copy(), fill(),fill_n(),都是stl算法。

1. construct(),属于<stl_construct.h>头文件,是内联函数

template<class T1, class T2>
inline void construct(T1* p, const T2& value) {
	new (p) T1(value) //placement new,在已分配的内存上创建对象,这里就是在p的空间上创建了一个
	新的值为value的T1对象
}

2. destroy()

//version 1
template<class T> 
inline void destroy(T* pointer) {
		pointer->~T();
}
//第二个版本,这里需要判断需要析构的元素类别是否有trivial destructor,关于trivial的定义,可参考我的
c++专栏文章《trivial/nontrivial函数》
template<class ForwardIterator>
inline void destroy(ForwardIterator first, ForwardIterator last) {
	__destroy(first, last, value_type(first));
}

template<class ForwardIterator, class T>
inline void __destroy(ForwardIterator first, ForwardIterator last, T*)  {
	typedef typename __type_traits<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 < last; ++first)
		destroy(&*first);
}
//元素的数值型别(value_type)有trivial destructor
template<class ForwardIterator>
inline void __destroy_aux(ForwardIterator first, ForwardIterator last, __true_type)  {
}
如果是trivial,就什么都不做,否则一一destroy()

3. uninitialized_copy()

//意义就是调用construct(&*(result + (i - first)), *i)
template<class InputIterator , class ForwardIterator>
ForwardIterator uninitialized_copy(InputIterator first, InputIterator last, ForwardIterator result);

4. uninitialized_fill()

//意义就是调用construct(&*i, x)
template<class ForwardIterator, class T>
void uninitialized_fill(ForwardIterator first, ForwardIterator last, const T&x);

5. uninitialized_fill_n()

//意义就是调用construct(&*i, x)
template<class ForwardIterator, class Size, class T>
void uninitialized_fill(ForwardIterator first, Size n, const T&x);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值