Я столкнулся с базовым классом, деструктор которого не является виртуальным, хотя базовый класс имеет 1 виртуальную функцию fv()
. Этот базовый класс также имеет много подклассов. Многие из этих подклассов определяют свой собственный fv()
.
Я не знаю подробностей о том, как база и подклассы используются в программе. Я знаю, что программа отлично работает, даже деструктор базового класса должен быть виртуальным.
Я хочу изменить деструктор базового класса от не виртуального к виртуальному. Но я не уверен в последствиях. Итак, что будет? Что еще мне нужно сделать, чтобы убедиться, что программа отлично работает после того, как я ее изменил?
Последующие действия:
После того, как я изменил деструктор базового класса из не виртуального в виртуальный, программа не смогла выполнить один тестовый пример.
Результат меня смущает. Поскольку, если деструктор базового класса не является виртуальным, тогда программа не будет использовать полиморфизм базового класса. Потому что, если нет, это приводит к поведению undefined. Например, Base *pb = new Sub
.
Итак, я думаю, что если я изменю деструктор от не виртуального к виртуальному, он не должен вызывать никаких ошибок.