析构函数与构造函数的作用几乎正好相反,它用来完成对象被删除前的一些清理工作,也就是专门做扫尾工作的。一般情况下析构函数的对象的生存期即将结束时候由系统自动调用,它调用完之后对象也就消失了,相应的内存空间也被释放。
析构函数也是类的一种特殊的成员函数,它具有以下一些特性:
(1)析构函数名是类名前加求反的符号~
(2)析构函数不指定返回类型,它隐含的有返回值,由系统内部使用。
(3)析构函数没有参数,因此析构函数不能重载,一个类只能由一个析构函数。
(4)在撤销系统时,系统会自动调用析构函数。
以下是一个小例子:
#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
class Point{
private:
int a;
int b;
public:
~Point();
Point();
Point(int m,int n);
};
int main(int argc, char** argv) {
Point point;
Point pint(23,45);
return 0;
}
Point::Point():a(1),b(1){
cout<<"无参构造函数"<<endl;
}
Point::Point(int m,int n):a(m),b(n){
cout<<"a="<<a<<"b="<<n<<endl;
}
Point::~Point(){
cout<<"析构函数"<<endl;
}
析构函数的第二个例子:
#include <iostream>
#include <string>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
class Students{
private:
int age;
string name;
public:
Students();
Students(int m,string n);
~Students();
void addStudents(int m1,string n1);
};
int main(int argc, char** argv) {
Students students;
Students Students(26,"张三");
students.addStudents(35,"成龙");
return 0;
}
Students::Students():age(24),name("徐旭丹"){
cout<<"无参构造函数-------------"<<endl;
}
Students::Students(int m,string n):age(m),name(n){
cout<<"有参构造函数"<<"m=="<<m<<"::n=="<<n<<endl;
}
Students::~Students(){
cout<<"析构函数的使用。。。"<<endl;
}
inline void Students::addStudents(int m,string n){
cout<<"自定义的一个函数"<<"m=="<<m<<"::n=="<<n<<endl;
}