简述
STL
定义有5个全局函数,作用于未初始化空间上。
construct
1 2 3 4 5 6 7 |
#include <new.h> template <class T1,class T2> inline void construct(T1* p,const T2& value) { new (p) T1(value); } |
destory
1 2 3 4 5 6 |
//第一个版本 template <class T> inline void destroy(T* pointer) { pointer->~T(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
//第二个版本 //此函数设法找出元素的数值型别 template <class ForwardIterator> inline void destroy(ForwardIterator first,ForwardIterator last) { __destroy(first,last,value_type(first)); } //判断元素的型别是否有trivial destructor template <class ForwardIterator,class T> inline void __destroy(ForwardIterator first,ForwardIterator last,T*) { typedef typename __type_traits<T>::has_trivial_destrctor trivial_destructor; __destroy_aux(first,last,trivial_destructor()); } //如果元素的数据型别有non-trivial destrctor template <class ForwardIterator> inline void __destroy_aux(ForwardIterator first,ForwardIterator last,__false_type) { for(;first < last; ++first) destroy(&*first); } //如果元素的数据型别有non-trivial destrctor template <class ForwardIterator> inline void __destroy_aux(ForwardIterator first,ForwardIterator last,__true_type) { } //特化char*和wchar_t* inline void destroy(char*,char*) {} inline void destroy(wchar_t*,wchar_t*) {} |
uninitialized_copy
1 2 3 |
template <class InputIterator,class ForwardIterator> ForwardIterator uninitialized_copy(InputIterator first,InputIterator last, ForwardIterator result); |
该函数能使我们将内存的配置与对象的构造行为分离开来
针对输入范围
[first,last)
内的每一个迭代器i
该函数会调用construct(&*(result+(i-first)),*i)
,产生*i
的复制品,放置于输出范围的相对位置上
uninitialized_fill
1 2 |
template <class ForwardIterator,class T> void uninitialized_fill(ForwardIterator first,ForwardIterator last,const T& x); |
该函数也能使我们将内存的配置与对象的构造行为分离开来
如果
[first,last)
内的每一个迭代器都指向未初始化的内存,那么该函数会在这个范围产生x的复制品
换句话:
针对输入范围[first,last)
内的每一个迭代器i
该函数会调用construct(&*i,x)
,产生x的复制品
uninitialized_fill_n
1 2 |
template <class ForwardIterator,class Size,class T> ForwardIterator uninitialized_fill_n() |
该函数也能使我们将内存的配置与对象的构造行为分离开来
它为指定范围内的所有元素设定相同的初值如果
[first,last)
内的每一个迭代器都指向未初始化的内存,那么该函数会调用拷贝构造函数,在该范围内产生x的复制品也就是说
针对输入范围[first,last)
内的每一个迭代器i
该函数会调用construct(&*i,x)
,产生x的复制品
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 51CTO:Linux C++网络编程一08/13
- ♥ C++并发编程 _ 共享数据05/16
- ♥ C++14_第二篇06/29
- ♥ Bkwin一12/01
- ♥ Spdlog记述:三07/23
- ♥ C++编程规范101规则、准则与最佳实践 二01/07