Я читал о шаблоне NonVirtual Interface: Herb Sutter говорит о том, почему виртуальная функция должна быть частной в большинстве случаев, защищенной в некотором случае и никогда публичной.
Но в конце статьи он пишет:
Не вытекает из конкретных классов. Или, как Скотт Мейерс помещает его в пункт 33 "Более эффективный С++", [8] "Сделать абстрактные листовые классы". (По общему признанию, это может произойти на практике - в коде, написанном кем-то другим, конечно, не вами! - и в этом случае вам может потребоваться публичный виртуальный деструктор, чтобы учесть то, что уже плохой дизайн. Лучше рефакторинг и исправьте дизайн, хотя, если сможете.)
Но я не понимаю, почему это плохой дизайн.