3.析构函数
类的六个默认成员函数在下面博客中讲到:
类与对象:https://blog.csdn.net/ly_6699/article/details/87870429
3.1 概念
析构函数不是完成对象的销毁,局部对象的销毁工作由编译器完成,但对象在销毁时会自动调用析构函数去完成类的一些资源清理工作。
3.2 特性
1.析构函数名是在类名前加上字符~
2.无参数无返回值
3.一个类有且只有一个析构函数。若未显式定义,系统会自动生成默认的析构函数
4.对象生命结束时,系统自动调用析构函数
typedef int DataType;
class Seqlist
{
public:
Seqlist(int capacity = 10)
{
_pData = (DataType*)malloc(capacity* sizeof(DataType));
assert(_pData);
_size = 0;
_capacity = capacity;
}
~Seqlist() //析构函数
{
if (_pData)
{
free(_pData);
_pData = NULL;
_capacity = 0;
_size = 0;
}
}
private:
int *_pData;
size_t _size;
size_t _capacity;
};
5.关于编译器自动生成的析构函数,是否会完成一些事情呢?下面的程序,我们会看到,编译器生成的默认函数,对会自定义类型成员调用它的析构函数,对内置类型不作处理。
class String
{
public:
String(const char* str = "jack")
{
_str = (char*)malloc(strlen(str) + 1);
strcpy(_str, str);
}
~String()
{
cout << "~String()" << endl;
free(_str);
}
private:
char* _str;
};
class Person
{
private:
//自定义类型
String _name;
//内置类型
int _age;
};
int main()
{
Person p;
system("pause");
return 0;
}