C++中虚析构函数的作用

在c++的类中虚析构函数一直不知道它有什么作用,等到今天来看才发现加virtual  和不加的区别特别大。

#include<iostream>

using namespace std;

class Parent
{
protected:
public:
	Parent()
	{;}
	//virtual ~Parent()
	~Parent()
	{
		cout<<"~Psrent
";
	}
virtual void print()
	{
		cout<<"p我仅仅是一个被调用的试验品、n
";
	}
};
class Child:public Parent
{
protected:
public:
	Child()
	{;}
	~Child()
	{
		cout<<"child ~
";
	}
 virtual void print()
	{
		cout<<"c我仅仅是一个被调用的试验品、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:
";
	objplay();
	cout<<"
objplay2:
";
	objplay2();
	cout<<"
objplay3:
";
	objplay3();
	system("pause");
}

  结果显示为:

在加上virtual后就变成了这样:

 由此观之virtual的作用很大,析构函数加上virtual后,会析构子类和父类,不会单一的只析构父类造成内存的泄漏。

原文地址:https://www.cnblogs.com/xiaochige/p/6679962.html