zoukankan      html  css  js  c++  java
  • 第22课 对象的销毁

    1. 对象的销毁

    (1)对象的销毁

    • 生活中的对象都是被初始化后才上市的(从而引入了构造函数

    • 生活中的对象销毁前会做一些清理工作

    (2)问题:C++中如何清理需要销毁的对象?

    • 一般而言,需要销毁的对象都应该做清理

    • 解决方案:

      • 每个类都提供一个publicfree函数

      • 对象不再需要时立即调用free函数进行清理

    class Test
    {
    int *p;
    public:
      Test() { p = new int; }
      void free() { delete p; };
    };
    • 存在的问题:
      • free只是一个普通的函数必须显示的调用

      • 对象销毁前没有做清理工作很可能造成资源泄露

    2. 析构函数

    (1)C++的类中可以定义一个特殊的清理函数,叫析构函数

    (2)析构函数功能构造函数相反

    (3)定义:~ClassName();    //注意,无参无返回值对象销毁时会被自动调用

    【编程实验】析构函数的使用初探  22-1.cpp

    #include <stdio.h>
    
     
    
    class Test
    {
    
    private:
    
        int mi;
    
     
    
    public:
    
        Test(int i)
    
        {
    
            mi = i;
    
            printf("Test(): %d
    ", mi);
    
        }
    
     
    
        //析构函数
    
        ~Test()
    
        {
    
            printf("~Test(): %d
    ", mi);
    
        }
    
    };
    
     
    
    int main()
    {
    
        Test t(1);
    
     
    
        Test* pt = new Test(2);
    
     
    
        delete pt;
    
     
    
        return 0;
    
    }

    运行结果:

    //Test(): 1

    //Test(): 2

    //~Test(): 2

    //~Test(): 1

    2. 析构函数的定义准则

      当类中自定义了构造函数,并且构造函数中使用了系统资源(如:内存申请、文件打开等),则需要自定义析构函数

    3. 小结

    (1)析构函数对象销毁时进行清理的特殊函数

    (2)析构函数对象销毁时自动被调用

    (3)析构函数对象释放系统资源的保障

  • 相关阅读:
    案例分析:从一则笑话分析需求的陷阱
    2019寒假培训第二天
    2019寒假培训第一天
    牛客网国庆集训派对Day6 题目 2018年
    unique STL讲解和模板
    SPFA 模板
    ACM Shenyang Onsite 2016 题目
    牛客网国庆集训派对Day5 题目 2018年
    The North American Invitational Programming Contest 2017 题目
    牛客网国庆集训派对Day4题目 2018年
  • 原文地址:https://www.cnblogs.com/hoiday/p/10091897.html
Copyright © 2011-2022 走看看