Просто приведу один пример: скажем, у вас есть базовый класс, который реализует подсчет ссылок.У вас есть методы addRef
и release
, и вы хотите, чтобы ваш объект был уничтожен, если (и только если) внутренний счетчик достигает нуля при вызове release
.
Итак, сначала вы хотите защитить свой деструктор (так как вы хотите уничтожить объект только из relase
).
Если вы планируете наследовать от своего класса, вы также хотите иметь виртуальный деструктор, поскольку вам нужен виртуальный деструктор, когда вы хотите уничтожить дочерний объект через указатель на базовый класс (спасибо @sharptooth занамек ...)