Виртуальные конструкторы - PullRequest
10 голосов
/ 11 июня 2011

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

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

Ответы [ 3 ]

10 голосов
/ 11 июня 2011

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

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

10 голосов
/ 11 июня 2011

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

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

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

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

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

1 голос
/ 11 июня 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...