Виртуальные деструкторы C++

цитата:

В языке программирования C++ деструктор полиморфного базового класса должен объявляться виртуальным. Только так обеспечивается корректное разрушение объекта производного класса через указатель на соответствующий базовый класс.

Виртуальные деструкторы необхожимы по следующим соображениям - схематично представим себе такую ситуацию:

lass A
{
 virtual ~A();
}
 
class B : public A
{
  virtual ~B();
}
// объект производного класса через указатель на соответствующий базовый класс.
A* pB = new B;
// удаляем
delete pB;

то есть - в случае если деструктор A не будет виртуальным, то вызовется только деструктор для А - то есть если класс В успел выделить в "куче" некоторый объём памяти - то произойдёт утечка памяти - так как деструктор для него вызван не будет.

в пример еже выше же будут вызваны оба деструктора - и А и В

Читайте подробнее источники:

  1. http://cpp-reference.ru/articles/virtual...
  2. http://forum.sources.ru/index.php?showto...