Страницы

Поиск по вопросам

понедельник, 28 января 2019 г.

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

Следует ли объявлять деструктор производного класса виртуальным, если в базовом классе он уже помечен таковым? Т.е., необходимость в виртуальном деструкторе в базовом классе мне ясна, в производном - нет. Возможно, не задумывался бы об этом, если бы не натыкался на статьи, в которых даны примеры, где по мнению авторов наличие виртуальных деструкторов в производных классах является, видимо, хорошим тоном.


Ответ

Согласно стандарту C++ (7.1.2 Function specifiers)
5 The virtual specifier shall be used only in the initial declaration of a non-static class member function;
То есть спецификатор функции virtual обязан присутствовать только в первоначальном объявлении функции.
Тем не менее я соглашусь, что присутствие этого спецификатора в объявлениях функций в производных классах делает код более ясным и самодокументируемым.
Что касается деструкторов, то, опять-таки, согласно стандарта C++ (10.3 Virtual functions)
6 Even though destructors are not inherited, a destructor in a derived class overrides a base class destructor declared virtual; see 12.4 and 12.5.
То есть если деструктор в базовом классе объявлен со спецификатором virtual, то деструктор в производном классе переопределяет деструктор базового класса, то есть ведет себя как виртуальная функция.

Комментариев нет:

Отправить комментарий