C++虚析构函数

构造函数、拷贝构造函数、静态成员函数 等都不能是虚函数,但是析构函数可以是虚函数。

作用:

用来指引delete关键字,正确回收空间。

#include <iostream>
using namespace std;

class Parent{
    	private:
    		int *p;
    	public:
    		Parent(int value):p(new int(value)){
			cout<<"Parent 有参构造"<<endl;
		}
		virtual ~Parent(){//虚析构函数
			cout<<"Parent 析构函数"<<endl;
			delete p;
		}
};

class Son:public Parent{
	private:
		int *q;
	public:
		Son(int value1,int value2):Parent(value1),q(new int(value2)){
			cout<<"Son 有参构造"<<endl;
		}
		~Son(){
			cout<<"Son 析构函数"<<endl;
			delete q;
		}
};

int main(int argc, const char *argv[])
{
	Parent *father = new Son(100,200);
	//基类指针指向子类对象时,如果析构函数不是虚函数
	//那么只会调用基类的析构函数,可能会造成内存泄露
	//如果基类的析构函数是虚函数
	//则会调用子类的析构函数,子类的析构函数会默认调用基类的析构函数,不会内存泄漏
	delete father;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小徐的记事本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值