1,基类或者父类的析构函数声明为虚函数后,他的子类的析构函数都将变成虚函数。
2,无论析构函数是不是虚函数,当子类对象被撤销时,都将自动调用父类的析构函数。
3,将父类或者基类声明为虚函数的目的是为了实现多态性,也就是晚绑定。
例如:
当指针pb被撤销时,调用的是base类的析构函数,而不调用child类的析构函数(静态联编)。当child类中动态申请了内存时,由于没有调用child类的析构函数,导致内存没有释放,内存泄漏。因此在基类base中将其析构函数声明为虚函数,其派生类的构造函数也将自动变成虚函数。此时在撤销指针pb时,由于多态特性,实现晚绑定,调用子类child的析构函数,将内存释放。
2,无论析构函数是不是虚函数,当子类对象被撤销时,都将自动调用父类的析构函数。
3,将父类或者基类声明为虚函数的目的是为了实现多态性,也就是晚绑定。
例如:
class base
{
public:
base(){}
~base(){}
}
class child : public base
{
public:
child(){}
~child(){}
}
int main()
{
base* pb;
child c;
pb = &c;
}
当指针pb被撤销时,调用的是base类的析构函数,而不调用child类的析构函数(静态联编)。当child类中动态申请了内存时,由于没有调用child类的析构函数,导致内存没有释放,内存泄漏。因此在基类base中将其析构函数声明为虚函数,其派生类的构造函数也将自动变成虚函数。此时在撤销指针pb时,由于多态特性,实现晚绑定,调用子类child的析构函数,将内存释放。