Страницы

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

суббота, 13 октября 2018 г.

Виртуальный деструктор при наследовании

Класс наследует интерфейс, в котором деструктор объявлен виртуальным. Надо ли в своем классе явно объявлять деструктор виртуальным? Чтобы обеспечить вызов деструктора при работе через интерфейс.
class MyInterface{ public: virtual ~MyInterface(){}; ... }
class MyClass : public MyInterface{ public: ~MyClass(); //или же необходимо virtual ~MyClass(); ... }


Ответ

Нет, не надо. Он уже и так виртуальный.
Начиная с 11-го стандарта, можно в данном случае использовать ключевое слово override. В таком случае, компилятор проверит, является ли деструктор базового класса (или переопределяемый метод в общем случае) виртуальным - и вы сможете отловить ситуацию, когда забыли сделать деструктор базового класса виртуальным.

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

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