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;
}

程序运行结果:


全部评论

相关推荐

Jcwemz:找实习千万别学性能和ui(入门找工作也不用学太多),老老实实把项目需求分析提测试点,跟进测试流程,提bug,填bug表单,出现bug怎么处理,这几个入门的玩意搞明白,实习就有人要你了
0经验如何找实习?
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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