Как я знаю, любой класс, который предназначен для наличия подклассов, должен быть объявлен с виртуальным деструктором, поэтому экземпляры класса могут быть уничтожены должным образом при доступе к ним через указатели.
Но почему даже можно объявить такой класс не виртуальным деструктором? Я считаю, что компилятор может решить, когда использовать виртуальные деструкторы. Итак, это надзор над дизайном С++, или я чего-то не хватает?