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