Виртуальное распространение на деструкторе - PullRequest
0 голосов
/ 20 января 2020

Я знаю, что virtual распространяется на метод производного класса, и необязательно указывать ключевое слово в объявлении метода для производного класса, и я знаю, что я ДОЛЖЕН пометить virtual деструктор базового класса, в Для того чтобы иметь полиморфное c уничтожение, но я хочу знать, является ли деструктор по умолчанию производного класса, наследовать virtual от виртуального деструктора базового класса, и поэтому я должен явно записать его в производный класс.

Пример:

class A{
public:
    virtual ~A() override = default;
}
class B: public A{
public:
    // have i to write this or it's already what the compiler get as default?
    virtual ~B() override = default;
}

Ответы [ 2 ]

2 голосов
/ 20 января 2020

Деструктор для производного класса, несмотря на то, что имя деструктора базового класса отличается от имени, переопределяет деструктор базового класса. Как и любое другое переопределение, оно является виртуальным, если тот, который переопределяет, является виртуальным.

0 голосов
/ 20 января 2020

Да, если функция-член (включая деструктор) помечена как virtual в базовом классе, она остается virtual во всех производных классах.

Вы можете опустить ключевое слово virtual в объявлении ~B() и даже полностью пропустить ~B(), если оно пустое.

...