В следующем примере, b
является полиморфным типом указателя которого статического типа Base*
и чей динамического типа Derived*
.Что происходит при удалении полиморфного объекта без виртуального деструктора?
struct Base
{
virtual void f();
};
struct Derived : Base
{
};
int main()
{
Base *b = new Derived();
// ...
delete b;
}
Что происходит, когда b
удаляется без виртуального деструктора?
прочитайте это также https://www.securecoding.cert.org/confluence/display/cplusplus/OOP52-CPP.+Do+not+delete+a+polymorphic+object+without+a+virtual+destructor – v78
Возможный дубликат [Виртуальный деструктор отсутствует для базового класса в полиморфизме = утечка Ressource?] (Http://stackoverflow.com/questions/33455750/virtual-destructor-missing-for-base-class-in-polymorphism-ressource-leak) – stefaanv