As it turns out, a polymorphic class must have a non-virtual constructor, just like everyone else.
Why can’t a constructor be virtual?
Let us consider some of the syntax alternatives to construct an object. For our discussion, let us consider A to be a class, myA and myOtherA be variables of class A type, and pA be a pointer to a class A object.
Because whenever a constructor is used, the type must be explicitly stated, the constructor can always be determined at compile time. As a result, there is no benefit in making the constructor virtual.