析构函数设置成虚函数正是体现了C++的多态性。当基类的指针指向子类时,析构的时候,如果析构函数不是虚函数的话,这样只会调用基类的析构函数。子类则不会被析构,这样就造成了内存泄露。如果定义成虚函数,那么则会先找到子类的析构函数,析构之后,再调用基类的析构函数。有些人设成虚函数是为了触发基类的析构函数,我觉得理解的不是太彻底,应该是虚函数只是为了找到子类的析构函数,而触发基类的析构函数是由子类时继承了基类才自然的就会调用基类的析构函数。
虚函数的实现。
class base
{
public:base()
{
cout<<"base consttruction"<<endl;
}
virtual print()
{
cout<<"base print"<<endl;
}
};
class child : public base
{
public:child()
{
cout<<"child contruction"<<endl;
}
virtual print()
{
cout<<"child print"<<endl;
}
};
void main()
{
base m_b;
child m_c;
base * pb = &m_b;pb->print();
pb = &m_c;pb->print();
}
运行的结果:
base consttruction 父类对象构造
base consttruction 先调用父类构造函数
child contruction 再调用子类构造寒素
base print 虚函数的多态性
child print
Press any key to continue