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

程序运行结果:


全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 11:29
已编辑
斯卡蒂味的鱼汤:知道你不会来数马,就不捞你😂最近数马疯狂扩招,招聘要求挺低的,你能力肯定够,应该就是因为太强了,知道你不会来才不捞你
投递腾讯云智研发等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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