Мне было интересно, что такое значение виртуального конструктора и как он будет использоваться.
Кроме того, я знаю, что С++ не позволяет создавать виртуальный конструктор, и мне было интересно, почему.
Мне было интересно, что такое значение виртуального конструктора и как он будет использоваться.
Кроме того, я знаю, что С++ не позволяет создавать виртуальный конструктор, и мне было интересно, почему.
С++ не позволяет создавать виртуальные конструкторы, потому что вам нужен объект для вызова виртуального метода в первую очередь!
Термин virtual constructor используется для idiom и хорошо известного шаблон дизайна. Эта идиома/шаблон включает определение factory: промежуточный объект с виртуальным методом, роль которого заключается в создании рассматриваемого объекта. Поскольку этот метод является виртуальным, а целью является создание объекта, его называют "виртуальным конструктором".
В С++ нет виртуальных конструкторов, хотя возможно имитировать поведение.
Почему нет виртуальных конструкторов в С++?
Моя попытка дать рассуждения:
В стандарте указано, что создание объекта не завершено до закрытия скобки конструктора. Таким образом, объект существует только после завершения конструктора.
Виртуальное ключевое слово используется для реализации полиморфного поведения, где в действительной функции, которая должна быть вызвана, оценивается во время выполнения, в зависимости от фактического типа объекта, указывает this
. Для того, чтобы конструктор был отправлен с использованием механизма виртуальной таблицы, должен существовать полностью существующий объект с указателем на виртуальную таблицу, но внутри конструктора сама конструкция объекта не завершена, так как может указатель на виртуальную таблицу существуют, если объект не сформирован полностью?
Рассуждение доктора Бьярна Страуструпа:
Проверьте следующее: http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Virtual_Constructor