C++中虚析构函数的作用
在c++的类中虚析构函数一直不知道它有什么作用,等到今天来看才发现加virtual 和不加的区别特别大。
#include<iostream>
using namespace std;
class Parent
{
protected:
public:
Parent()
{;}
//virtual ~Parent()
~Parent()
{
cout<<"~Psrent\n";
}
virtual void print()
{
cout<<"p我仅仅是一个被调用的试验品、n\n";
}
};
class Child:public Parent
{
protected:
public:
Child()
{;}
~Child()
{
cout<<"child ~\n";
}
virtual void print()
{
cout<<"c我仅仅是一个被调用的试验品、n\n";
}
};
void objplay()
{
Child c1;
}
void objplay2()
{
Parent *p1=new Parent;
delete p1;
}
void objplay3()
{
Parent *p2=new Child;
p2->print();//这里会造成多太。没成想开辟的child的内存空间,就是child的类型了,
//就要用child的print,如果不加vitrual,则直接用父类的
delete p2;//这里父类的析构函数不加virtual的话,就只会析构p2的类型,父类的析构函数,但是本身调用子类了,
//所以这就造成了内存的泄漏,父类的析构函数必须为虚函数
}
int main()
{
cout<<"objplay:\n";
objplay();
cout<<"\nobjplay2:\n";
objplay2();
cout<<"\nobjplay3:\n";
objplay3();
system("pause");
}
结果显示为:
在加上virtual后就变成了这样:
由此观之virtual的作用很大,析构函数加上virtual后,会析构子类和父类,不会单一的只析构父类造成内存的泄漏。

浙公网安备 33010602011771号