zoukankan      html  css  js  c++  java
  • C++中的析构函数

    1,对象的销毁:

        1,生活中的对象都是被初始化后才上市的;

           1,为了引入生活中初始化的过程,我们引入了构造函数的概念;

        2,生活中的对象被销毁前会做一些清理工作;

           1,生活中手机在回收机构被拆卸,之后将能复用的材料运回工厂再加工利用;

        3,C++ 中如何清理需要销毁的对象?

       

    2,一般而言,需要销毁的对象都应该做清理,解决方案:

        1,为每一个类都提供一个 public 的 free 函数;

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

     3,代码示例:

    1 class Test
    2 {
    3     Int* p;
    4 public:
    5     Test() { p = new int; }
    6     void free() { delete p; 
    7 };

       

    3,IntArray 使用分析实例分析:

        1,见“C++学习笔记”系列博客中“C++中的深拷贝和浅拷贝构造函数”第9条目中的内容;

        2,未有定义析构函数,只是一个 free() 函数,会造成本文中的问题;

       

    4,存在的问题:

        1,free 只是一个普通的函数,必须显示的调用;

        2,对象销毁前没有做清理,很可能造成资源泄漏;

           1,很可能会造成软件长时间运行的不稳定;

        3,C++ 编译器是否能够自动调用某个特殊的函数进行对象的清理?

       

    5,析构函数:

        1,C++ 的类中可以定义一个特殊的清理函数;

           1,这个特殊的清理函数叫做析构函数;

           2,析构函数的功能与构造函数相反;

        2,定义:~ClassName()(这个特殊的符号是取反的意思)

           1,析构函数没有参数也没有返回值类型声明;

               1,析构函数是不能重载的,因为重载需要参数列表不同;

               2,只剩下函数体可以利用;

           2,析构函数在对象销毁时自动被调用;

          

    6,析构函数使用初探编程实验:

     1 #include <stdio.h>
     2 
     3 class Test
     4 {
     5     int mi;
     6 public:
     7     Test(int i)
     8     {
     9         mi = i;
    10         printf("Test(): %d
    ", mi);
    11     }
    12     
    13     ~Test()
    14     {
    15         printf("~Test(): %d
    ", mi);
    16     }
    17 };
    18 
    19 int main()
    20 {
    21     Test t(1);  // 这里被创建,促进构造函数语句的打印,到 return 之前时,局部变量就会被销毁,此时析构函数被自动调用;
    22     
    23     Test* pt = new Test(2);  // 堆空间上定义对象,调用构造函数;
    24     
    25     delete pt;  // 删除指针的同时销毁堆空间对象,此时会调用析构函数;
    26     
    27     return 0;  // 在此语句之前,调用 t 对象析构函数;
    28 }

       

    7,IntArray 类的进化编程实验:

        1,将 free() 函数换为析构函数来实现;

        2,析构函数只是自动调用并做一些简单的析构,对于系统资源的析构,还是要手动进行;

       

    8,析构函数的定义准则:

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

           1,自定义了构造函数,多半要自定义析构函数,因为自定义构造函数多半会申请系统资源;

           2,析构函数完成的工作有:

               1,归还内存;

               2,关闭文件等;

       

    9,小结:

        1,析构函数是对象销毁时进行清理的特殊函数;

        2,析构函数在对象销毁时自动被调用;

        3,析构函数是对象释放系统资源的保障;

           1,使编写的软件更加稳定;

  • 相关阅读:
    忍者X2简介+安装包+安装环境说明 [复制链接]
    拖拽的功能,可以看看这个
    openNI驱动控制kinect马达
    室内机器人漫游
    石头剪子布 C++多态实现
    PCL的KinectFusion开源实现
    Microsoft Kinect SDK中的Event Model
    小说下载阅读器_章节保存为XML并显示
    面试题:猫叫、老鼠跑、人醒的一点看法
    JQuery EasyUI之treegrid级联勾选的简单改进版
  • 原文地址:https://www.cnblogs.com/dishengAndziyu/p/10906406.html
Copyright © 2011-2022 走看看