C++虚析构函数的使用(可能造成内存泄露问题)

问题:C++虚拟函数的简单范例

本程序通过VC++ 6.0编译与测试,两段程序分别演示了不使用虚析构函数和使用虚析构函数的结果,具体代码如下:

//未使用虚析构函数,程序目的:删除子类和父类的变量
#include <iostream>
using namespace std;

class Base
{
public:
	Base(){}
	//virtual  //未使用虚析构函数 

	~Base()
	{
		cout<<"Base destructor!"<<endl;
	}
};

class Derived : public Base
{
public:
	Derived(){}
	~Derived()
	{
		cout<<"Derived destructor!"<<endl;
	}
};

int main()
{
	Base *p=new Derived();//声明一个子类对象在堆区
	delete p;//p是父类指针,在没有虚函数的情况下,操作父类的指针,调用父类的析构
	//子类只释放了继承自父类的成员,子类自身的成员没有释放,造成内存的泄露
	return 0;
}

程序运行结果:



//使用虚析构函数,程序目的:删除子类和父类的成员
#include <iostream>
using namespace std;

class Base
{
public:
	Base(){}
	virtual  //注意,此处使用了虚析构函数 
	~Base()
	{
		cout<<"Base destructor!"<<endl;
	}
};

class Derived : public Base
{
public:
	Derived(){}
	~Derived()
	{
		cout<<"Derived destructor!"<<endl;
	}
};

int main()
{
	Base *p=new Derived();//声明一个子类对象在堆区
	delete p;//使用虚析构函数时,既释放了子类也释放了父类的成员
	return 0;
}

程序运行结果:


全部评论

相关推荐

10-29 15:51
嘉应学院 Java
后端转测开第一人:你把简历的学历改成北京交通大学 去海投1000份发现基本还是没面试
点赞 评论 收藏
分享
牛客36400893...:我不是这个专业的,但是简历确实没有吸引我的亮点,而且废话太多没耐心看
0offer是寒冬太冷还...
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务