Виртуальные деструкторы C++
Primary tabs
цитата:
В языке программирования C++ деструктор полиморфного базового класса должен объявляться виртуальным. Только так обеспечивается корректное разрушение объекта производного класса через указатель на соответствующий базовый класс.
Виртуальные деструкторы необхожимы по следующим соображениям - схематично представим себе такую ситуацию:
lass A
{
virtual ~A();
}
class B : public A
{
virtual ~B();
}
// объект производного класса через указатель на соответствующий базовый класс.
A* pB = new B;
// удаляем
delete pB;
то есть - в случае если деструктор A не будет виртуальным, то вызовется только деструктор для А - то есть если класс В успел выделить в "куче" некоторый объём памяти - то произойдёт утечка памяти - так как деструктор для него вызван не будет.
в пример еже выше же будут вызваны оба деструктора - и А и В
Читайте подробнее источники:
- http://cpp-reference.ru/articles/virtual-destructor/
- http://forum.sources.ru/index.php?showtopic=82651&hl=
- Log in to post comments
- 4333 reads