What is the correct way to create and add components at runtime ?

Whoa that’s big news!

So do you know how to add Blueprint component in C++ code?
I mean designing a Add Component function which could accepts both C++ and BP Component class.
I’m reading this function AActor::AddComponent(), but this one is BlueprintInternalUseOnly, so I think I shouldn’t use it in my C++ code.