2.3 内存基本处理工具
这里面主要包括了三个函数
- uninitialized_copy()
- uninitialized_fill()
- uninitialized_fill_n()
对应着高层次的函数
- copy()
- fill()
- fill_n()
这些都是STL算法。
uninitialized_copy()
讲某一区间的内容复制到另一个区间:
- 配置内存区块,足以包含范围内的所有元素
- 使用该函数,在该内存区块上构造元素
C++标准中要求这个函数具有“commit or rollback”的语义,其实也就是让这个操作原子话,当某个copy constructor失败时回滚所有已发生的操作。
接受三个参数:
- 迭代器first指向输入端的起始位置
- 迭代器last指向输入端的结束位置(前闭后开区间)。
- 迭代器result指向输出端(欲初始化空间)的起始处。
uninitialized_fill()
对于范围内的所有区块,都构造一个给定的内存内容。同样要求有原子性。
uninitialized_fill_n()
类似前者,从first位置开始,构造n个第三参数的复制品。同样也在标准中要求原子性
本函数接受三个参数:
- 迭代器first指向欲初始化空间的起始处。
- n表示欲初始化空间的大小
- x表示初值
1 | template <class ForwardIterator, class Size, class T> |
这段代码先取出迭代器first
的value type,然后判断该类别是否为POD类别。POD也就是Plain Old Data
也就是标量型或传统的C struct
类别。POD类别拥有trivial ctor/dtor/copy/assignment函数,因此对POD类别采用最有效率的初值填写手法,而对非POD类别采用最保险安全的做法。