UE4 Core模块阅读一:Container - TArray相关
源码版本 4.22.3 听闻4.25内存分配那做了较大的改变,暂且不看。。
本文是我在看ue4源码时做的笔记,如有不对的地方,还希望大佬可以指出来。
一:begin
文件所在位置:
第一个模板参数指代元素类型,第二个指内存分配器。
特别的,在
中有TArray的默认内存分配器的特化版本。
友元声明是为了能够使用另一种类型的TArray访问当前类型的TArray的私有成员。
二:几种构造函数
1.从原生数组构造,传入头指针和元素数量。
2.通过初始化列表构造。
3.从另外一组拥有相同元素类型但内存分配器类型不同的TArray构造。
4.通常形式的拷贝构造函数。
5.添加一个参数ExtraSlack控制在数组尾部预分配内存的大小。
6.初始化列表赋值操作符。
7.赋值操作符,允许内存分配器不同。
8.一般形式的赋值操作符。
实现:
1:头指针位置 2:元素数量 3:数组最大容量,赋值用 4:预分配内存块
注:除赋值操作,其它prevMax均是0即一定会重分配内存,若赋值时所需内存与原大小相同,则不会触发重分配。
newmax包括元素数量和预留大小。
通过HAL硬件抽象层分发,以及一些宏的开关,在不同平台上有不同的实现方案。但是永远大于等于num*sizePerElement。
//todo