• 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的析构函数。

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

     

  • 相关阅读:
    黑白逆向编程课程笔记 8.静&动态地址&偏移
    黑白逆向编程课程笔记 7.CE使用(2)
    黑白逆向编程课程笔记 6.CE使用(1)
    传奇资源
    分布式——分布式发号器
    SpringBoot——属性注入
    SpringBoot——启动与自动配置类查找
    Mybatis——Spring事务实现
    SpringAOP——事务实现
    Linux——IO技术
  • 原文地址:https://www.cnblogs.com/iloverain/p/5639092.html
Copyright © 2020-2023  润新知