Всем известно, что дескриптор базового класса обычно должен быть виртуальным. Но что такое деструктор производного класса? В С++ 11 мы имеем ключевое слово "переопределить" и возможность явно использовать деструктор по умолчанию.
struct Parent
{
std::string a;
virtual ~Parent()
{
}
};
struct Child: public Parent
{
std::string b;
~Child() override = default;
};
Правильно ли использовать оба слова "переопределить" и "= по умолчанию" в деструкторе класса Child? Будет ли компилятор генерировать правильный виртуальный деструктор в этом случае?
Если да, то можем ли мы думать, что это хороший стиль кодирования, и мы всегда должны объявлять деструкторы производных классов таким образом, чтобы гарантировать, что деструкторы базового класса являются виртуальными?