首页 > 代码库 > C++中虚析构函数的作用

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后就变成了这样:技术分享

 

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