Add component to actor in C++ (the final word!)

Blockquote AActor::AddComponentByClass() , followed by AActor::FinishAddComponent()

I second this. I found it’s important to be aware of bDeferredFinish and that some component’s may need special initialization prior to InitializeComponent().

For example, attempting to AddComponentByClass() without bDeferredFinish == true for UPhysicalAnimationComponent will lead to UPhysicalAnimationComponent::InitComponent() but the UPhysicalAnimationComponent::SkeletalMeshComponent is not yet set. And InitComponent() is private so it cannot be called elsewhere. This lead to the game freezing and never crashing.

There is also AActor::AddComponent() which takes a UObject and appears to duplicate it, but I think the Add+FinishAdd method is cleaner.