如果父类里执行了delete
而父类的析构函数没有加virtual声明的话
子类的析构函数是不会被调用的
希望在父类调用delete时,子类的析构函数被调用
则在父类的析构函数加上virtual
父类没有加virtual析构函数的情况下:
class Parent {
Parent() { }
~Parent() { }
void deleteSelf() { delete this; }
};
class Child : public Parent {
Child() { }
~Child() { /* not working */ }
}
int main()
{
Child *child = new Child;
// 此处不会调用Child的析构函数
child->deleteSelf();
}
父类加了virtual析构函数的情况下:
class Parent {
Parent() { }
virtual ~Parent() { }
void deleteSelf() { delete this; }
};
class Child : public Parent {
Child() { }
~Child() { /* working */ }
}
int main()
{
Child *child = new Child;
// 此处会调用Child的析构函数
child->deleteSelf();
}