美文网首页
FStruct和UNewClass 在元素类型中小小区别

FStruct和UNewClass 在元素类型中小小区别

作者: Edwin_红狼 | 来源:发表于2023-11-06 14:03 被阅读0次

为什么在UE5中C++,TArray<UNewClass*>指针而不支持TArray<UNewClass>对象

在UE4和UE5中,TArray<UNewClass*>意味着这是一个指针数组,数组的每个元素都是指向UNewClass对象的指针。而TArray<UNewClass>则是对象数组,每个元素都是UNewClass对象的实例。

UE的GC(Garbage Collection,垃圾回收器)通过引用计数来管理内存,对于UObject类型(即所有Unreal类的基本类型),GC仅跟踪对象的指针以判断对象是否仍在使用。如果只有对象实例而没有指针指向它,GC可能错误地认为这个对象没有被使用,然后在下一次垃图回收中删除它。这就是为什么在Unreal中通常使用对象指针而非对象实例。

此外,创建对象实例(TArray<UNewClass>)可能会导致开销较大,特别是当对象很大或需要频繁创建和销毁时。而使用对象指针(TArray<UNewClass*>),则可以通过新建、销毁指针来进行有效的内存管理,避免对象的频繁创建和销毁引起的性能问题。

那为什么在UE5中C++,TArray<FStruct*>指针并不支持而是支持TArray<FStruct>对象?

FStruct对象和UObject对象在Unreal Engine中被处理的方式不同。FStruct是在栈上实例化的,不会被垃圾收集系统,也没有元数据用于反射。另外,FStruct是值类型,拷贝这种类型的数据意味着内存里会有两份完全一样的复制品。

因此,TArray<FStruct*>在Unreal Engine中并不常用,如果使用指针的话,就会有责任去跟踪和删除不再需要的内存,而这并不是UE整体设计思路中的自动化内存管理。而TArray<FStruct>则是将具体的FStruct对象实例存储在数组中,你无需去关心对象的创建和销毁,UE会自动管理其生命周期。

在实际开发中,使用TArray<FStruct>而不是TArray<FStruct*>,可以使代码更易读和理解,也可以避免内存泄露。也因为结构体是值类型,每一次复制都是创建新的内存,因此复制操作相当快,这是支持使用TArray<FStruct>的一个重要原因。

相关文章

  • swift面试知识点

    1.Array和ContiguousArray的区别?答:Array是值类型,其中装载的元素也是值类型,再进行赋值...

  • [Swift基础语法入门]Sets

    字典(dictionary)、数组(array)、集合(set)区别: 字典特性:元素不重复、存储无序、元素类型可...

  • [Swift基础语法入门]Sets

    字典(dictionary)、数组(array)、集合(set)区别: 字典特性:元素不重复、存储无序、元素类型可...

  • Array和Collection的相互转化

    Array Collection的区别数组:子元素是相同类型,且数组大小有界集合:子元素可以是不同类型,可自动...

  • 第三次学习内容总结

    1.元素类型元素类型有:内联元素和块状元素。内联元素的特点:(1)可以和其他元素在同一行上。(2)不支持宽高,对上...

  • 任务8——CSS常见样式

    1.块级元素和行内元素分别有哪些? 区别1块级元素可以包含块级元素和行内元素;行内元素只能包含文本和行内元素 区别...

  • Java 常用工具-集合

    1.集合简介 什么是集合? 简称集,是用来存储多个元素的容器 集合和数组的区别 1.元素类型 集合:引用类型(存储...

  • 链表与数组的区别

    链表和数组都可用来存放指定的数据类型。 数组和链表区别: 数组:数组元素在内存上连续存放,可以通过下标查找元素;插...

  • Day 5 letitgo 数据类型

    一 数据类型 1. 向量(vector) 1.标量和向量的区别 元素:指数字或字符串标量:一个元素组成的变量向量:...

  • DIV+CSS布局

    一、div和span区别 块元素与内联元素区别 块元素又称块级元素(block element)和其对应的是内联元...

网友评论

      本文标题:FStruct和UNewClass 在元素类型中小小区别

      本文链接:https://www.haomeiwen.com/subject/axtxwdtx.html