Есть ли какая-либо связь между виртуальным деструктором и Vtable
Вопрос
Если мы пишем виртуальную функцию, она добавляет vtable в объект этого класса.Верно ли это и для виртуального деструктора ?Используется ли vtable для реализации виртуальности деструктора
Решение
ДА.Необходима некоторая информация, позволяющая вызывать правильный деструктор при удалении объекта с помощью указателя базового класса.Является ли эта информация небольшим целочисленным индексом или указателем, не имеет значения (хотя динамическая привязка, вероятно, подразумевает, что это указатель).Естественно, эта информация должна находиться рядом с (внутри) указанным объектом.
Добавление виртуального метода любого типа, включая деструктор, к классу, у которого раньше его не было, увеличит sizeof(класс).
Другие советы
Я не верю, что стандарт C ++ требует какого-либо конкретного механизма для создания правильного поведения, но да, это типичная реализация. Класс с по крайней мере 1 виртуальной функцией имеет таблицу (виртуальных) указателей на функции, деструктором является один из них, если он помечен как виртуальный.
Да, это так. Извините, у меня нет точной ссылки для подтверждения моего утверждения. Но как еще вы могли бы получить другое поведение, используя только указатель на объект?
ДА.Виртуальный деструктор подобен любому другому виртуальному методу.Запись в Vtable будет добавлена.
Он обрабатывается как любая другая нормальная функция и будет добавлен в vtable.