I do not think that this is “the unreal way” of doing things.
You can use custom constructors for UObjects and create them with “new” operator. I’m not sure if this is possible with actors.
If you want to setup custom parameters for actor before you spawn it - it’s better to use deferred spawn instead of “new” operator (at least for Actors)
Check this example:
AActor* DefSpawn = UGameplayStatics::BeginDeferredActorSpawnFromClass(this, AShooterWeapon::StaticClass(), GetTransform(), ESpawnActorCollisionHandlingMethod::AlwaysSpawn);
// setup params for def spawn
// DefSpawn->Velocity = 300;
// DefSpawn->Damage = 500;
UGameplayStatics::FinishSpawningActor(DefSpawn, GetTransform());