Как указал Джесси, наследуемые деструкторы всегда вызываются (они вызываются для вас компилятором без возможности переопределить это поведение), поэтому понятно, что виртуальный деструктор должен иметь реализацию. Итак, если у чистого виртуального деструктора должна быть реализация, в чем разница между чистым виртуальным деструктором и обычным виртуальным деструктором? Если в вашем абстрактном классе объявлен только виртуальный деструктор, а других чистых виртуальных методов нет, то чистота деструктора не позволит кому-либо создать экземпляр абстрактного класса.