Подтвердить что ты не робот

Виртуальные конструкторы

Мне было интересно, что такое значение виртуального конструктора и как он будет использоваться.

Кроме того, я знаю, что С++ не позволяет создавать виртуальный конструктор, и мне было интересно, почему.

4b9b3361

Ответ 1

С++ не позволяет создавать виртуальные конструкторы, потому что вам нужен объект для вызова виртуального метода в первую очередь!

Термин virtual constructor используется для idiom и хорошо известного шаблон дизайна. Эта идиома/шаблон включает определение factory: промежуточный объект с виртуальным методом, роль которого заключается в создании рассматриваемого объекта. Поскольку этот метод является виртуальным, а целью является создание объекта, его называют "виртуальным конструктором".

Ответ 2

В С++ нет виртуальных конструкторов, хотя возможно имитировать поведение.

Почему нет виртуальных конструкторов в С++?
Моя попытка дать рассуждения:
В стандарте указано, что создание объекта не завершено до закрытия скобки конструктора. Таким образом, объект существует только после завершения конструктора.

Виртуальное ключевое слово используется для реализации полиморфного поведения, где в действительной функции, которая должна быть вызвана, оценивается во время выполнения, в зависимости от фактического типа объекта, указывает this. Для того, чтобы конструктор был отправлен с использованием механизма виртуальной таблицы, должен существовать полностью существующий объект с указателем на виртуальную таблицу, но внутри конструктора сама конструкция объекта не завершена, так как может указатель на виртуальную таблицу существуют, если объект не сформирован полностью?

Рассуждение доктора Бьярна Страуструпа:

Почему у нас нет виртуальных конструкторов?