C++中虚析构函数作用和继承

析构函数是在对象消亡时,自动被调用,用来释放对象占用的空间。

虚析构函数执行优先级是子到父,继承中的析构函数也是子到父。

我们是否可利用继承的关系,达到虚析构的效果。

上代码

#include<iostream>
using namespace std;

class Preson
{
public:
	 ~Preson()
	{
		cout << "i am ~preson\n";
	}
};
class chind:public Preson
{
public:
	 ~chind()
	{
		cout << " i am ~chind \n";
	}
};
int main()
{
	Preson* p = new chind;



	//delete特点 1.释放的时候只看是什么函数类型就执行什么函数类型的析构函数
	//2.不管执行的是什么函数类型的析构函数 申请的空间 依旧释放
	delete (chind*)p;

	system("pause");
	return 0;
}

执行结果

i am ~chind
i am ~preson
请按任意键继续. . .

现在我们用虚析构函数

#include<iostream>
using namespace std;
class Preson
{
public:
	 virtual ~Preson()
	{
		cout << "i am ~preson\n";
	}
};
class chind:public Preson
{
public:
	 ~chind()
	{
		cout << " i am ~chind \n";
	}
};
int main()
{
	Preson* p = new chind;



	//delete特点 1.释放的时候只看是什么函数类型就执行什么函数类型的析构函数
	//2.不管执行的是什么函数类型的析构函数 申请的空间 依旧释放
	delete p;

	system("pause");
	return 0;
}

执行结果

i am ~chind
i am ~preson
请按任意键继续. . .

可以看出效果是一样的

总结:delete (强转类型) p  我们依旧释放了 new chind  只不过执行的析构函数不同

在正确的位置做正确的事情,析构虽然可以是虚函数,但是慎用。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632