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