一.文档的相关描述
二.添加的方式和机制的自我理解
void AWXArrayActor::AddStrArry()
{
TArray<FString> StrArray;
StrArray.Add("ab");
StrArray.Add("123");
}
TArray的增加,不是来一个加一个。而是类似std::Vector那样增加,大概就是超过容器容量,加一倍这样。
Num = 4,之前都是4.
TArray的Add,可用于简单常见的数据结构 int32,float这样。即使有临时值代价也不大。但如果是USTURCT,FString这样的就可以用Emplace这样,直接加入数组。
三. 对于复杂结构的添加,Add Emplace的区别
首先构造结构体
USTRUCT()
struct FXGAddStructInfo
{
GENERATED_USTRUCT_BODY()
public:
FXGAddStructInfo()
{
UE_LOG(LogTemp, Warning, TEXT("我被构造了"));
}
FXGAddStructInfo(int32 InHealth)
:Health(InHealth)
{
UE_LOG(LogTemp,Warning,TEXT("我来初始化了"));
}
~FXGAddStructInfo()
{
UE_LOG(LogTemp, Warning, TEXT("我被析构了"));
}
int32 Health = 100;
};
测试Add,Emplace的区别
UCLASS()
class NETPRACTICE_API AWXTArrayActor : public AActor
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable)
void AddStructArray();
UFUNCTION(BlueprintCallable)
void EmplaceArray();
// Sets default values for this actor's properties
AWXTArrayActor();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
UPROPERTY()
TArray<FXGAddStructInfo> StructArray;
};
void AWXTArrayActor::AddStructArray()
{
StructArray.Add(100);
}
void AWXTArrayActor::EmplaceArray()
{
StructArray.Emplace(200);
}
来看测试结果
Add 创建了临时变量,它在复制前被析构了,复制的对象加入TArray。而Emplace 没有,一直被TArray管理着。
当结束运行时,非RunTime。两个TArray里的对象,会被析构。