Я считаю, что конструкторы не могут быть объявлены виртуальными по следующей причине:
Для вызова виртуальной функции требуется, чтобы указатель vtable (vptr) уже был правильно инициализирован, чтобы он указывал на соответствующую таблицу виртуальных функций. Только тогда правильная функция может быть решена посредством виртуальной диспетчеризации. Однако правильная инициализация самого vptr происходит во время построения объекта. Если бы конструкторам было разрешено быть виртуальными, это привело бы к проблеме: вызов виртуального конструктора потребовал бы, чтобы vptr уже был правильно инициализирован, но инициализация vptr, в свою очередь, потребовала бы вызова конструктора, что привело бы к циклической зависимости.
Однако GPT утверждает, что утверждение «правильная инициализация vptr происходит в конструкторе» неверно. Согласно GPT, основная причина, по которой конструкторы не могут быть виртуальными, — это не ограничение реализации, а семантическое ограничение: семантика виртуальной диспетчеризации конфликтует с семантикой построения объекта. Поэтому конструкторам запрещено быть виртуальными, потому что виртуальная диспетчеризация во время строительства семантически неопределенна, а не потому, что ее технически невозможно реализовать.
Несколько дней назад в интервью интервьюер спросил меня, можно ли объявить конструктор виртуальным. Мой ответ был по сути тем же, что я описал выше. Я хочу знать, действительно ли мое объяснение проблематично. Будет ли такое заявление в интервью считаться серьезной ошибкой?
Подробнее здесь: https://stackoverflow.com/questions/798 ... -vptr-init
Допустимо ли на собеседовании объяснять, почему конструкторы C++ не являются виртуальными, используя порядок инициализац ⇐ C++
Программы на C++. Форум разработчиков
1766063946
Anonymous
Я считаю, что конструкторы не могут быть объявлены виртуальными по следующей причине:
Для вызова виртуальной функции требуется, чтобы указатель vtable (vptr) уже был правильно инициализирован, чтобы он указывал на соответствующую таблицу виртуальных функций. Только тогда правильная функция может быть решена посредством виртуальной диспетчеризации. Однако правильная инициализация самого vptr происходит во время построения объекта. Если бы конструкторам было разрешено быть виртуальными, это привело бы к проблеме: вызов виртуального конструктора потребовал бы, чтобы vptr уже был правильно инициализирован, но инициализация vptr, в свою очередь, потребовала бы вызова конструктора, что привело бы к циклической зависимости.
Однако GPT утверждает, что утверждение «правильная инициализация vptr происходит в конструкторе» неверно. Согласно GPT, основная причина, по которой конструкторы не могут быть виртуальными, — это не ограничение реализации, а семантическое ограничение: семантика виртуальной диспетчеризации конфликтует с семантикой построения объекта. Поэтому конструкторам запрещено быть виртуальными, потому что виртуальная диспетчеризация во время строительства семантически неопределенна, а не потому, что ее технически невозможно реализовать.
Несколько дней назад в интервью интервьюер спросил меня, можно ли объявить конструктор виртуальным. Мой ответ был по сути тем же, что я описал выше. Я хочу знать, действительно ли мое объяснение проблематично. Будет ли такое заявление в интервью считаться серьезной ошибкой?
Подробнее здесь: [url]https://stackoverflow.com/questions/79849348/is-it-acceptable-to-explain-why-c-constructors-are-not-virtual-using-vptr-init[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия