前言
这里将内存处理工具
放到这里来讲是因为必须对__type_traits
类型定义有所了解, 对traits
编程有所了解才行.(如果你还没有了解这些, 希望能去看一下前面4篇的文章). 而且容器实现的很多地方都会用到uninitialized_copy
的函数, 虽然乍一看功能应该是执行复制操作, 但如果第一次看或者事先没有理解该函数怎么工作的可能会影响到部分人分析代码的效率, 所以在这里就提前对其进行分析.
uninitialized_copy函数
uninitialized_copy
功能 : 从first到last范围内的元素复制到从 result地址开始的内存.
template <class InputIterator, class ForwardIterator>
inline ForwardIterator uninitialized_copy(InputIterator first, InputIterator last,
ForwardIterator result) {
return __uninitialized_copy(first, last, result, value_type(result));
}
很明显这就只是调用另一个函数的接口而已.
uninitialized_copy
类似于第一篇分析空间配置器的destory
针对const char*
和const wchar*
单独做了特例化.
inline char* uninitialized_copy(const char* first, const char* last,
char* result) {
memmove(result, first, last - first);
return result + (last - first);
}
inline wchar_t* uninitialized_copy(const wchar_t* first, const wchar_t* last,
wchar_t* result) {
memmove(result, first, sizeof(wchar_t) * (last - first));
return result + (last - first);
}
直接调用c++的memmove
操作, 毕竟这样的效率更加的高效.
__uninitialized_copy函数
template <class InputIterator, class ForwardIterator, class T>
inline ForwardIterator __uninitialized_copy(InputIterator first, InputIterator last,
ForwardIterator result, T*) {
typedef typename __type_traits