Страницы

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

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

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

#cpp #деструктор


Класс наследует интерфейс, в котором деструктор объявлен виртуальным. Надо ли в своем
классе явно объявлять деструктор виртуальным? Чтобы обеспечить вызов деструктора при
работе через интерфейс.

class MyInterface{
public:
    virtual ~MyInterface(){};
    ...
}

class MyClass : public MyInterface{
public:
    ~MyClass(); //или же необходимо virtual ~MyClass();
    ...
}

    


Ответы

Ответ 1



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

Ответ 2



Нет, достаточно написать virtual в базовом классе. Но чтобы точно документировать - для себя - лично я предпочитаю писать это virtual. Тогда вам не придется искать базовый класс, чтобы убедиться, что какая-то функция - виртуальна.

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

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