Вызов деструкторов абстрактных классов

У меня есть три класса.

class Son : public Father;

class Father : public Grandfather;

Father абстрактно и так Grandfather, Son НЕ абстрактно.

Если я сделаю это:

Son* son = new Son();

и затем сделайте это:

delete(son)

как мне убедиться, что деструкторы Father а также Grandfather называются?

1

Решение

Деструкторы родительских классов к вашему указателю будут вызываться несмотря ни на что.

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

Когда функция virtual, он будет виртуальным для всего дерева деривации, нет необходимости отмечать его в дочерних классах. Однако обычно это хорошая форма, это помогает людям читать код.

2

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

Других решений пока нет …

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