析构函数设置成虚函数正是体现了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
本文详细介绍了C++中将析构函数设置为虚函数的重要性。通过实例演示了当基类指针指向派生类对象时,若析构函数非虚,则只会调用基类的析构函数导致内存泄漏;而虚析构函数能够确保正确调用派生类的析构函数,进而调用基类的析构函数,避免内存泄漏。
646

被折叠的 条评论
为什么被折叠?



