подпись виртуального деструктора

Для виртуального механизма у нас должно быть одинаковое имя метода в базовом и производном классах.
Однако в случае виртуальных деструкторов имена могут быть разными.

Кто-нибудь может объяснить, как виртуальный механизм (V-Ptr, V-Table) поддерживает / работает с деструкторами с разными именами.

0

Решение

Это зависит от реализации, при условии, что она может вызвать правильный деструктор. Средства для этого могут быть частью общего виртуального механизма или специальным механизмом только для деструкторов.

Можно было бы ожидать, что имена функций не появляются в vtables в любом случае: компилятор просто назначает смещение в таблице для каждой виртуальной функции в каждом классе. Так что вопрос о том, есть ли у деструкторов имена, и если да, то каковы они, не актуален.

0

Другие решения

virtual деструкторы обрабатываются иначе, чем виртуальные функции. Все деструкторы в цепочке наследования вызываются, когда объект уничтожается, в отличие от методов, где при вызове вызывается только переопределение в наиболее производном классе.

virtual деструктор по сути идентичен не виртуальному, за исключением того факта, что он должен присутствовать если вы собираетесь удалить объект через указатель на базовый класс (иначе это неопределенное поведение).

1

У класса может быть только один деструктор, поэтому нет необходимости, чтобы имя было одинаковым — вы не используете имя для идентификации который деструктор, потому что в классе только один деструктор.

0
По вопросам рекламы [email protected]