This isn't about "When VTABLE is created?". Rather, when VPTR ought to be initialized ? Could it be beginning/ending from the constructor or before/following the constructor ?

A::A () : i(0), j(0)  -->> here ?
{
  -->> here ?
  //...
  -->> here ?
}

The machinery for virtual calls (often a v-table, but does not have to be) is to establish throughout the ctor-initializer, after construction of base subobjects and before construction of people. Section [class.base.init] decrees:

Member functions (including virtual member functions, 10.3) could be known as to have an object being built. Similarly, an item being built could possibly be the operand from the typeid operator (5.2.8) or of the dynamic_cast (5.2.7). However, if these procedures are carried out inside a ctor-initializer (or perhaps in a function known as directly or not directly from the ctor-initializer) before all of the mem-initializers for base classes have finished, caused by the procedure is undefined.

Really, throughout construction from the base subobjects, the virtual function machinery is available, but it's setup for that base class. Section [class.cdtor] states:

Member functions, including virtual functions (10.3), could be known as throughout construction or destruction (12.6.2). Whenever a virtual function is known as directly or not directly from the constructor or from the destructor, including throughout the development or destruction from the class’s non-static data people, and also the resist that the call is applicable may be the object (refer to it as x) being built or destruction, the function known as may be the final overrider within the constructor’s or destructor’s class and never one overriding it inside a more-derived class. When the virtual function call uses an explicit class member access (5.2.5) and also the object expression refers back to the complete object of x a treadmill of this object’s base class subobjects although not x a treadmill of their base class subobjects, the behaviour is undefined.

it's initialized between your constructors of base and derived classes:

class Base { Base() { } virtual void f(); };
class Derived { Derived(); virtual void f(); };

It takes place when raw memory is transformed into Base object. It takes place when Base object is transformed into Derived object throughout construction of the object. Same clearly occur in reverse when wrecking object. I.e. each time when type changes, the vtable pointer is transformed. (I am sure someone comments that vtables don't have to is available based on the std..)