There should be no reason to call System::TObject::InitInstance directly. System::TObject::InitInstance is called by System::TObject::NewInstance when an object is created. When overriding System::TObject::NewInstance, be sure to call System::TObject::InitInstance as the last statement.

System::TObject::InitInstance is not virtual, so you cannot override it: Instead, initialize any data for an object in the constructor.