For example, if I want to spawn an actor one of input parameters is UClassclass.
I can assign what class to spawn two different ways, by ABomb BombClass->GetClass() and ABomb::StaticClass()
As I can tell, the first one creates instance, the other doesn’t, can somebody confirm me that?
And what about performance? Which should I use?
1 Like
Hi,
UType::StaticClass() returns the class for UType, whereas Obj->GetClass() returns the class for whichever type Obj was created as, even if you’re calling it through a base pointer.
For example:
AMyActor* ActorPtr = NewObject<AMyActor>(...);
UObject* ObjPtr = Actor;
UClass* MyActorClass = AMyActor::StaticClass(); // AMyActor
UClass* ObjectClass = UObject::StaticClass(); // UObject
UClass* ActorPtrClass = ActorPtr->GetClass(); // AMyActor
UClass* ObjPtrClass = ObjPtr->GetClass(); // AMyActor
Hope this helps,
Steve
3 Likes
ahh I see, so UType::StaticClass() is definite, while Obj->GetClass() can be dynamic, since pointer can be reassigned to different object. Thanks man!
That’s how polymorphism and virtual functions work. Suppose we have following classes:
class A{
public:
int fun(){return 1;}
};
class B : public A{ //B inherits from A
public:
int fun(){return 2;} //hides A::fun method
};
int main(){
A* a = new A;
A* b = new B;
B* c = (B*)b;
a->fun(); //returns 1
b->fun(); //still returns 1
c->fun(); //returns 2!
}
But when I add virtual before int fun() in class A body, b->fun() will return 2 instead of 1. Magic! ![]()
yeah i got that, virtual can be overridden by their child class
anyways, thanks man, appreciate it. it can get messy starting with lots of info and not knowing what to implement