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