Вот в этой теме: Как удаляется vptr?
Насколько я помню, код из задачи воспроизведен точно. Разве что, мне кажется, изначально в классе Base не было виртуального деструктора. К нему нужно было прийти в процессе обсуждения поведения примера.
Если мне не изменяет мой склероз, то нужно было рассказать что напечатает этот пример, почему и что в нем следовало бы поправить.
Про то, что из себя представляет виртуальная таблица у меня тоже пытались спросить. Вроде бы я ответил в духе, что никогда этим не интересовался, мол это внутреннее дело компилятора. Типа есть себе и есть.
Полагаю, этого хватило, т.к. у меня сложилось ощущение, что интервьюера больше интересовало понимание того, что эта самая таблица меняется в процессе жизни объекта. Т.е. когда объект конструируется и вызывается конструктор базового класса эта таблица одна (там находятся указатели на реализации виртуальных методов именно базового класса). Когда объект уже сконструирован, то таблица другая -- актуальная для именно этого типа объекта. Когда объект разрушается, то таблица вновь меняется.
Без этого понимания сложно будет объяснить какой именно из print-ов будет вызван и почему.
Добавлю, что меня собеседовал один человек и вопросов о том "утечет ли vptr" или "что будет с виртуальным указателем" (чтобы не подразумевалось на RSDN под этим термином) не было. И интервьюер, и само собеседование мне лично показались более чем адекватными. Так что негатив, который в обсуждении на RSDN был высказан, я не понимаю и не разделяю.
PS. Подробнее о том, как меня занесло на собеседования в Тинькофф и почему в итоге от предложения отказался я рассказывал в прошлом году.
По-моему, таблица виртуальных объектов хранится гдето в статической глобальной памяти (не знаю, как это по-научному называется). Это логично, все смещения виртуальных функций известны на этапе компиляции, можно их один раз создать и больше не трогать.
ОтветитьУдалить@sv
ОтветитьУдалитьНа RSDN засветили вот ссылки, может будут полезны для понимания того, как устроены vtable:
https://shaharmike.com/cpp/vtable-part1/
https://shaharmike.com/cpp/vtable-part2/