跳至主要內容

F10.Class&OBJ|类和对象

Mr.Si大约 4 分钟u++Specifiers

类和对象

头像
类和对象什么区别?
头像
这个叫类
class Person {
public:
    string Name;
    int Age;
};
头像
根据这个类实例化的叫对象
Person person1;
Person new person2;
//....
delete person2;
头像
类的实例化就是创建对象的过程。在面向对象编程中,通过实例化类来创建对象,这个过程也被称为类的实例化。而UE中因为有反射系统,推荐你用NewObject来实例化

UE类实例化

模板

UYourClass* MyObject = NewObject<UYourClass>();

静态工厂

UYourClass* MyObject = UYourClass::CreateInstance();

SpawnActor

AYourActor* MyActor = GetWorld()->SpawnActor<AYourActor>(YourActorClass, SpawnLocation, SpawnRotation);

UE类引用

TSoftClassPtr<UUserWidget> WidgetClass;
UClass* UUserWidget = WidgetClass.Get();
头像
注意这里还是类,不是实例化的对象,所以你可以在引擎中看到从类构建实例、创建UI的控件、spawnActor这种节点。
头像
先来了解一下几个UE中的引用类型.
  1. 对象引用 (TObjectPtr):
    • 特性: 对象引用是强引用,它持有对 UObject 派生类对象的强引用,当对象销毁时,引用计数减少。
    • 用途: 适用于需要确保对象在引用期间不会被销毁的情况,例如需要持有一个具体对象的引用。
TObjectPtr<UYourClass> MyObject;
  1. 软引用 (TSoftObjectPtr):
    • 特性: 软引用是一种弱引用,它不会增加对象的引用计数。如果对象被销毁,软引用会变为无效。
    • 用途: 适用于需要引用对象,但不要求对象一直存在的情况,例如在需要加载对象时,但不希望对象一直保持在内存中。
TSoftObjectPtr<UYourClass> MySoftObject;
  1. 类引用 (TSubclassOf):
    • 特性: 类引用是用于引用类的一种方式,而不是类的实例。它不会增加类的引用计数。
    • 用途: 适用于需要引用类本身而不是类的实例的情况,例如在运行时动态生成对象的时候。
TSubclassOf<UYourClass> MyClass;
  1. 软类引用 (TSoftClassPtr):
    • 特性: 软类引用是软引用的类版本,用于引用类,当类被销毁时,引用变为无效。
    • 用途: 类似于软引用,适用于需要引用类但不要求一直存在的情况,例如在需要加载类时。
TSoftClassPtr<UYourClass> MySoftClass;
头像
本质都是指针

UE中的指针模板

  1. shared_ptr|共享指针:

记录该对象当前被多少个共享指针所持有。当一个共享指针被销毁时,所有指向该对象的共享指针的计数都会减少。当指向一个对象的所有共享指针都被销毁时,对象自动被销毁。

  1. unique_ptr|唯一指针:

该对象只能被一个唯一指针所持有。当唯一指针被销毁时,对应的对象也被销毁。

  1. weak_ptr|弱指针:

该指针并不直接指向对象,而是指向该对象的共享指针。这样即使弱指针始终存在,没有被销毁,对象也会在共享指针的管理下自动销毁。

参考链接

【UE4】对象指针,类指针,智能指针,硬引用,软引用open in new window