virtual constructor - a constructor cannot be virtual, because to create an object, we need complete information of its type. "virtual constructor" is the name of a technique for calling a virtual function to create an object of an appropriate type.

Virtual Constructor is also a technique developed by Jim Coplien (see book Advanced C++ style and Idioms).

Basically this depends on the ability to re-use a memory address to construct another object, here is an example.
Say I have a memory address representing a BIOS data, e.g. date/time
structure. To directly represent this memory location as an object BIOSDateTime I can construct it on that location by using following syntax :

BIOSDateTime *bT= new (BIOSLOCATION)BIOSDateTime();

prior to above call BIOSLOCATION would have been declared with the
memory address.

#define BIOSLOCATION ((void*)0x0000ff33;

The perspective is that no memory allocation is done only constructor gets called.

BTW, above is a completely pseudo code, I haven't done any programming at BIOS for a long long long time.

But you get the picture, from above method we will know the hardware date/time in real-time.

Now comes the fun part, Coplien used this perspective to
construct an object at runtime from within a base class (or any other
derived class, but actual class is constructed at runtime).

Where would you use it, where you don't know which object may be instantiated in advance and the cost of knowing that will incur performance hit.

For example a software that has to process different communication
packets and take action on it, here you want a progressive construction of the concrete packet class, but you don't want one monlithic function to interepret each and every special packet.
it assumes that the packets are following an Envelop / Letter pattern, i.e.
concrete packets are enveloped within a base packet.