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