【UE4】反射系统分析(一)

本文深入探讨了UE4中的反射系统,包括宏标记的作用、反射数据的存储方式以及如何通过元数据获取类、结构体、函数和枚举的反射信息。同时,介绍了UBT和UHT在编译和代码生成中的角色。

一、反射的宏标记

  在编写UE4 C++代码时,我们经常使用UCLASS()、USTRUCT()、UENUM()、UFUNCTION()、UPROPERTY()等宏去标记我们的类和成员变量,只有添加这些宏的类或成员才能将其添加到反射系统。这样,基于UE4反射的GC系统等可以管理我们的反射数据。举例而言,当一个继承UObject的类对象指针被声明时,如果不使用UPROPERTY将其标记,则GC不能察觉到它的存在,也就不能对其进行管理。当GC认为没有其它对象包含该对象的指针引用时,将对其回收,那么此成员变量将会成为野指针,这个操作是有风险的。所以,我们应该主动用UPROPERTY标记,由UE4的GC帮我们管理该成员指针。或者使用AddToRoot方法,防止GC。
  在宏标记中,我们可以选择性的添加标识符,以决定被反射数据可以在哪里使用、如何被使用。有选择性添加标识符,可以减少不必要的反射数据,这样做可以节省元数据所占用的内存。

二、反射数据

  被反射的类或变量等数据将会被保存在元数据当中。也就是说通过元数据对象,我们可以获取到被反射类或成员的所有数据,比如类名、继承关系、包含的成员变量、类型信息等。元数据类的继承关系如下:
UE4反射元数据类图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值