码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-04-07 21:20:22      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:include   str   析构   logs   nbsp   cpp   alt   class   delete   

 

在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++中虚析构函数的作用

标签:include   str   析构   logs   nbsp   cpp   alt   class   delete   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!