Что касается # 1, почему переопределение происходит в функциях с разными именами?
Это не переопределение.Каждый класс имеет свой деструктор, может быть, определенный пользователем или нет.И если вы уничтожаете объект, каждый из деструкторов вызывается в порядке снизу вверх в иерархии наследования.
Важное примечание: если у вас есть виртуальный базовый класс и уничтожаете объект с помощью базового указателя,ваши деструкторы должны быть помечены как virtual
, чтобы также уничтожать снизу вверх, а не только тип, который имеет базовый указатель.
Относительно # 2, это особенность C ++, что деструкторы-члены систематическивызывается деструктором класса?
Да, деструктор вызывает деструкторы из всех членов.
Подсказка: если элемент является необработанным указателем, деструктор только «уничтожает»указатель, а не элемент, на который он указывает.Поэтому вы должны либо использовать умные указатели, либо позаботиться о том, чтобы удалить все свои собственные объекты в деструкторе, предоставленном пользователем, который вы создали в другом месте.