Есть ли какая-либо связь между виртуальным деструктором и Vtable

StackOverflow https://stackoverflow.com/questions/1436617

  •  08-07-2019
  •  | 
  •  

Вопрос

Если мы пишем виртуальную функцию, она добавляет vtable в объект этого класса.Верно ли это и для виртуального деструктора ?Используется ли vtable для реализации виртуальности деструктора

Это было полезно?

Решение

ДА.Необходима некоторая информация, позволяющая вызывать правильный деструктор при удалении объекта с помощью указателя базового класса.Является ли эта информация небольшим целочисленным индексом или указателем, не имеет значения (хотя динамическая привязка, вероятно, подразумевает, что это указатель).Естественно, эта информация должна находиться рядом с (внутри) указанным объектом.

Добавление виртуального метода любого типа, включая деструктор, к классу, у которого раньше его не было, увеличит sizeof(класс).

Другие советы

Я не верю, что стандарт C ++ требует какого-либо конкретного механизма для создания правильного поведения, но да, это типичная реализация. Класс с по крайней мере 1 виртуальной функцией имеет таблицу (виртуальных) указателей на функции, деструктором является один из них, если он помечен как виртуальный.

Да, это так. Извините, у меня нет точной ссылки для подтверждения моего утверждения. Но как еще вы могли бы получить другое поведение, используя только указатель на объект?

ДА.Виртуальный деструктор подобен любому другому виртуальному методу.Запись в Vtable будет добавлена.

Он обрабатывается как любая другая нормальная функция и будет добавлен в vtable.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top