C++之类和对象的使用(二)

  析构函数

析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一系列清理工作,使这部分内存可以被程序分配给新对象使用。对象生命周期结束,程序就自动执行析构函数来完成这些工作。

析构函数是一种特殊的成员函数,它的作用与构造函数相反,它的名字前面加一个“~”符号,在C++中,“~”是取反运算符,这点可以看出析构函数和构造函数的作用是相反的。

当对象的生命结束时,会自动执行构造函数。具体有以下四种情况:

1)如果在一个函数中定义了一个对象(假设是自动局部对象),当这个函数被调用结束时,对象应该释放,在对象释放前自动执行析构函数

2)静态(static)局部对象在函数调用结束时对象并不释放,因此也不调用析构函数,只在main函数结束或调用exit函数结束程序时,才调用static局部对象的析构函数。

3)如果定义了一个全局的对象,则在程序的流程离开其作用域时,调用该全局的对象的析构函数。

4)如果用new运算符动态地建立了一个对象,当用delete运算符释放该对象时,先调用该对象的析构函数。

析构函数不返回任何值,没有函数类型,也没有函数参数。由于没有函数参数,因此不能被重载,这点区别于构造函数。一个类可以有多个构造函数,但只能有一个析构函数;

除上述作用之外,它可以被用来执行“用户希望在最后一次使用对象之后所执行的任何操作”。例如输入有关信息。。。

//#inculde<string>  //Dev C++条件下编译
#include<iostream>
using namespace std;
class Student
{
    public:
        Student(int n,string nam, char s)
        {
            num=n;
            name=nam;
            sex=s;
            cout<<"Consrructor called. "<<endl;        
        }
        ~Student()
        {
            cout<<"Destructor called. "<<num<<endl;        
        }
        void display()
        {
            cout<<"num: "<<num<<endl;
            cout<<"name: "<<name<<endl;
            cout<<"sex: "<<sex<<endl;
        }
        private:
            int num;
            string name;
            char sex;        
};
            int main()
            {
                Student stud1(10010,"Wang_li",'f');
                stud1.display();
                Student stud2(10011,"Zhang_dalei",'m');
                stud2.display();
                return 0;
            }  

注意:先执行stud2的析构函数,再执行stud1的析构函数。

   调用构造函数和析构函数的顺序

 

posted @ 2016-07-04 10:36  QualityAssurance21  阅读(681)  评论(0编辑  收藏  举报