In reply to ridip.mandal:
There are no consequences for registering a class definition with the factory other than it limits your constructor to having one argument (name) for classes derived from uvm_object, and two arguments (name, parent) for classes derived from uvm_component. There can be performance consequences for creating class objects with the factory if you are going to be creating a lot of objects over time.
You should get in the habit of registering all classes with the factory. You may not have a reason for overriding it now, but at some point, someone will want to do it and they can’t because you did not register it with the factory. An exception to this might be automatically generated classes, like a register model where you know it will not use the factory. An there can be a slight time 0 performance penalty for registration once you start getting into the 10s of thousands of class registrations.
My other suggestion is to get in the habit of always using the factory create() method instead of new() to construct any class derived from uvm_component or uvm_sequence_item that is not defined inside the UVM base class library(uvm_tlm_fifo).