UE4 Core模块阅读一:Container - TArray相关

源码版本 4.22.3  听闻4.25内存分配那做了较大的改变,暂且不看。。

本文是我在看ue4源码时做的笔记,如有不对的地方,还希望大佬可以指出来。

 


一:begin

文件所在位置:

UE4 Core模块阅读一:Container - TArray相关

UE4 Core模块阅读一:Container - TArray相关

第一个模板参数指代元素类型,第二个指内存分配器。

特别的,在

UE4 Core模块阅读一:Container - TArray相关

中有TArray的默认内存分配器的特化版本。

友元声明是为了能够使用另一种类型的TArray访问当前类型的TArray的私有成员。


二:几种构造函数

UE4 Core模块阅读一:Container - TArray相关

 

1.从原生数组构造,传入头指针和元素数量。

2.通过初始化列表构造。

3.从另外一组拥有相同元素类型但内存分配器类型不同的TArray构造。

4.通常形式的拷贝构造函数。

5.添加一个参数ExtraSlack控制在数组尾部预分配内存的大小。

6.初始化列表赋值操作符。

7.赋值操作符,允许内存分配器不同。

8.一般形式的赋值操作符。

 

实现:

UE4 Core模块阅读一:Container - TArray相关

1:头指针位置 2:元素数量  3:数组最大容量,赋值用 4:预分配内存块

UE4 Core模块阅读一:Container - TArray相关

UE4 Core模块阅读一:Container - TArray相关注:除赋值操作,其它prevMax均是0即一定会重分配内存,若赋值时所需内存与原大小相同,则不会触发重分配。

newmax包括元素数量和预留大小。

UE4 Core模块阅读一:Container - TArray相关通过HAL硬件抽象层分发,以及一些宏的开关,在不同平台上有不同的实现方案。但是永远大于等于num*sizePerElement。

UE4 Core模块阅读一:Container - TArray相关

UE4 Core模块阅读一:Container - TArray相关

 

//todo