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