Когда люди задают такой вопрос, я хотел бы подумать про себя: «Что бы произошло, если бы это было действительно возможно?» Я на самом деле не знаю, что это будет значить, но я думаю, что это как-то связано с возможностью переопределить реализацию конструктора на основе динамического типа создаваемого объекта.
Я вижу ряд потенциальных проблем с этим. С одной стороны, производный класс не будет полностью создан во время вызова виртуального конструктора, поэтому существуют потенциальные проблемы с реализацией.
Во-вторых, что произойдет в случае множественного наследования? Вероятно, ваш виртуальный конструктор будет вызываться несколько раз, тогда вам нужно будет каким-то образом узнать, какой из них вызывается.
В-третьих, вообще говоря, во время конструирования объект не имеет полностью построенной виртуальной таблицы, это означает, что потребуется значительное изменение спецификации языка, чтобы учесть тот факт, что динамический тип объекта будет известно во время строительства. Это позволило бы конструктору базового класса вызывать другие виртуальные функции во время создания с не полностью сконструированным динамическим типом класса.
Наконец, как кто-то еще указал, вы можете реализовать своего рода виртуальный конструктор, используя статические функции типа «create» или «init», которые в основном делают то же, что и виртуальный конструктор.