虚析构和纯虚析构函数

5.1 虚析构
5.1.1 virtual ~类名() {}
5.1.2 解决问题: 通过父类指针指向子类对象释放时候不干净导致的问题
5.2 纯虚析构函数
5.2.1 写法 virtual ~类名() = 0
5.2.2 类内声明 类外实现
5.2.3 如果出现了纯虚析构函数,这个类也算抽象类,不可以实例化对象
析构函数

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;

#if(0)
class Modulator {
public:
	virtual void doBussiness() {
		cout << "调制器调用~" << endl;
	}

	~Modulator() {
		cout << "Modulator虚析构函数调用..." << endl;
	}
};

class Demodulator :public Modulator {
public:
	/*
	如果第23行不写const,第41行会出现以下错误:
	C2664	cannot convert argument 1 from 'const char [7]' to 'char *'
	*/
	Demodulator(const char *name) {
		this->m_name = new char[strlen(name) + 1];
		strcpy(this->m_name, name);
	}

	virtual void doBussiness() {
		cout << m_name << "调用..." << endl;
	}

	~Demodulator() {
		cout << "Demodulator虚析构函数调用..." << endl;
		if (this->m_name != NULL) {
			delete this->m_name;
			this->m_name = NULL;
		}
	}

private:
	char *m_name;
};

void test01() {
	Modulator *mod= new Demodulator("调制器");
	mod->doBussiness();

	delete mod;
}
int main(){
	test01();
	
	system("pause");
	return 0;
}
#endif

在这里插入图片描述
虚析构函数

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;

#if(0)
class Modulator {
public:
	virtual void doBussiness() {
		cout << "调制器调用~" << endl;
	}

	virtual ~Modulator() {
		cout << "Modulator虚析构函数调用..." << endl;
	}
};

class Demodulator :public Modulator {
public:
	/*
	如果第23行不写const,第41行会出现以下错误:
	C2664	cannot convert argument 1 from 'const char [7]' to 'char *'
	*/
	Demodulator(const char *name) {
		this->m_name = new char[strlen(name) + 1];
		strcpy(this->m_name, name);
	}

	virtual void doBussiness() {
		cout << m_name << "调用..." << endl;
	}

	~Demodulator() {
		cout << "Demodulator虚析构函数调用..." << endl;
		if (this->m_name != NULL) {
			delete this->m_name;
			this->m_name = NULL;
		}
	}

private:
	char *m_name;
};

void test01() {
	Modulator *mod = new Demodulator("调制器");
	mod->doBussiness();

	delete mod;
}
int main() {
	test01();

	system("pause");
	return 0;
}
#endif

在这里插入图片描述
纯虚析构

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;

#if(1)
class Modulator {
public:
	virtual void doBussiness() {
		cout << "调制器调用~" << endl;
	}

	virtual ~Modulator() = 0;
};

Modulator::~Modulator(){
	cout << "Modulator纯虚析构函数调用..." << endl;
}

class Demodulator :public Modulator {
public:
	/*
	如果第23行不写const,第41行会出现以下错误:
	C2664	cannot convert argument 1 from 'const char [7]' to 'char *'
	*/
	Demodulator(const char *name) {
		this->m_name = new char[strlen(name) + 1];
		strcpy(this->m_name, name);
	}

	virtual void doBussiness() {
		cout << m_name << "调用..." << endl;
	}

	~Demodulator() {
		cout << "Demodulator虚析构函数调用..." << endl;
		if (this->m_name != NULL) {
			delete this->m_name;
			this->m_name = NULL;
		}
	}

private:
	char *m_name;
};

void test01() {
	Modulator *mod = new Demodulator("调制器");
	mod->doBussiness();

	delete mod;
}
int main() {
	test01();

	system("pause");
	return 0;
}
#endif

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值