In reply to dharamvir:
The difference depends on what you have put in the extended class. If you have only overrides of virtual methods and constraints, there is no difference. But if you add more class members and methods, you cannot access extended class members from a base class variable. That is the case if create() a base class object and override the factory type.
BTW, registering a virtual class with the factory seems to be a tool dependent “feature”. That is because some tools allow you to compile code that have calls to the constructor of a virtual class, but error at runtime if you actually do.