Is there a way to prevent instantiating objects using NewObject?

As far as I am concerned, the UObject system would require a default constructor to be defined - primarily for the sake of creating the CDO.
Knowing that, is there a way to prevent users from instantiating a certain class using the NewObject method? Bottom line is, I am trying to delegate the instantiation to a factory method.

I have tried setting the constructor to be protected, and included the **customConstructor **specifier for my UClass. However, instantiating the object threw no compile time errors or warnings.

Do not export the class with XXXX_API.

​​Or do UCLASS(MinimalAPI)
Or UCLASS(Abstract)

I believe abstract would prevent my factory method from instantiating it as well? As for MinimalAPI and not exporting - does that not mean I cannot work with the object in the editor (cannot be exposed to BP)? Either ways it seems like the solution is pushing me to create a base abstract class.

Yes I would create an abstract base class.