Виртуальные деструкторы, вызывающие как производные, так и базовые деструкторы

У меня проблемы с пониманием виртуальных функций. Когда я перегружаю виртуальную функцию, вызывается только новая производная функция? Или как производные, так и базовые функции? Потому что я заметил, что когда вызываются виртуальные деструкторы, то вызывается база И деструкторы производного класса.

1

Решение

деструкторы являются специальными функциями-членами в этом конкретном отношении.
Если у вас есть виртуальный деструктор базового класса, он будет правильно вызывать Base, а также деструкторы производного класса во время полиморфного удаления (вызов delete для указателя базового класса pointinf на объект производного класса.).

Однако другие виртуальные функции-члены не имеют такой же особый статус, как деструкторы. Только функция, определенная для соответствующего типа объекта, вызывается. Если вам нужна любая другая функция для вызова, вы должны сделать это явно.

4

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

объект производного класса — не что иное, как обертка для объекта базового класса.
Таким образом, в случае деструкторов, оба деструктора должны быть вызваны, что является ожидаемым поведением.

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

2

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