F10.Class&OBJ|类和对象
大约 4 分钟
类和对象
class Person {
public:
string Name;
int Age;
};
Person person1;
Person new person2;
//....
delete person2;
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();
- 对象引用 (
TObjectPtr
):- 特性: 对象引用是强引用,它持有对
UObject
派生类对象的强引用,当对象销毁时,引用计数减少。 - 用途: 适用于需要确保对象在引用期间不会被销毁的情况,例如需要持有一个具体对象的引用。
- 特性: 对象引用是强引用,它持有对
TObjectPtr<UYourClass> MyObject;
- 软引用 (
TSoftObjectPtr
):- 特性: 软引用是一种弱引用,它不会增加对象的引用计数。如果对象被销毁,软引用会变为无效。
- 用途: 适用于需要引用对象,但不要求对象一直存在的情况,例如在需要加载对象时,但不希望对象一直保持在内存中。
TSoftObjectPtr<UYourClass> MySoftObject;
- 类引用 (
TSubclassOf
):- 特性: 类引用是用于引用类的一种方式,而不是类的实例。它不会增加类的引用计数。
- 用途: 适用于需要引用类本身而不是类的实例的情况,例如在运行时动态生成对象的时候。
TSubclassOf<UYourClass> MyClass;
- 软类引用 (
TSoftClassPtr
):- 特性: 软类引用是软引用的类版本,用于引用类,当类被销毁时,引用变为无效。
- 用途: 类似于软引用,适用于需要引用类但不要求一直存在的情况,例如在需要加载类时。
TSoftClassPtr<UYourClass> MySoftClass;
UE中的指针模板
- shared_ptr|共享指针:
记录该对象当前被多少个共享指针所持有。当一个共享指针被销毁时,所有指向该对象的共享指针的计数都会减少。当指向一个对象的所有共享指针都被销毁时,对象自动被销毁。
- unique_ptr|唯一指针:
该对象只能被一个唯一指针所持有。当唯一指针被销毁时,对应的对象也被销毁。
- weak_ptr|弱指针:
该指针并不直接指向对象,而是指向该对象的共享指针。这样即使弱指针始终存在,没有被销毁,对象也会在共享指针的管理下自动销毁。