• 析构函数


    什么是析构函数

    创建对对象时,系统会自动调用构造函数为我们进行初始化,同样,在销毁对象时也会自动调用一个函数为我们收尾,如释放内存等,这个函数是析构函数。

    析构函数也是一种特殊的成员函数。

    特点

    • 析构函数的名称和类的名称相同,在前面加~
    • 析构函数没有返回值,无参数
    • 析构函数只能在类中使用,且只有一个参数
    • 不能继承和重载析构函数
    • 析构函数不能显性调用

    什么时候调用析构函数

    1. 对象生命周期结束被销毁时
    #include <bits/stdc++.h>
    using namespace std;
    class A {
    	public :
    		A(){ printf("A()
    "); }
    		~A() { printf("~A()
    "); }
    };
    
    int main() {
    	A a;
    	printf("do sth
    ");
    	return 0;
    }
    

    输出

    A()
    do sth
    ~A()
    
    1. 主动delete指向对象的指针时

    我们用new创建了一个指向对象的指针,如果不主动delete,像这样

    #include <bits/stdc++.h>
    using namespace std;
    class A {
    	public :
    		A(){ printf("A()
    "); }
    		~A() { printf("~A()
    "); }
    };
    
    int main() {
    	A *p = new A;
    	printf("do sth
    ");
    	return 0;
    }
    

    会输出

    A()
    do sth
    

    调用delete释放空间时会调用析构函数

    #include <bits/stdc++.h>
    using namespace std;
    class A {
    	public :
    		A(){ printf("A()
    "); }
    		~A() { printf("~A()
    "); }
    };
    
    int main() {
    	A *p = new A;
    	printf("do sth
    ");
    	delete p;
    	return 0;
    }
    

    输出

    A()
    do sth
    ~A()
    
    1. 对象A是对象B的成员,B的析构函数被调用时,A的也会被调用
    #include <bits/stdc++.h>
    using namespace std;
    class A {
    	public :
    		A(){ printf("A()
    "); }
    		~A() { printf("~A()
    "); }
    };
    class B {
    	A a;
    	public :
    		B(){ printf("B()
    "); }
    		~B() { printf("~B()
    "); }
    };
    class C {
    	B a;
    	public :
    		C(){ printf("C()
    "); }
    		~C() { printf("~C()
    "); }
    };
    int main() {
    	C c;
    	return 0;
    }
    

    输出

    A()
    B()
    C()
    ~C()
    ~B()
    ~A()
    

    构造函数是先调用类成员的,再调用自己的,析构函数是先调用自己的,再调用类成员的。

    QQ浏览器截屏未命名.png

  • 相关阅读:
    spy++工具
    select 设置发送超时发送注意事项
    C++ Socket超时设置
    linux下的find文件查找命令与grep文件内容查找命令
    C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
    vc6.0出现“cannot add new member”解决办法
    Nginx虚拟主机配置(20200202)
    Centos7内核版安装nginx环境问题及解决方法
    Nginx架构分析(20200202)
    软链接和硬链接——Linux中的文件共享
  • 原文地址:https://www.cnblogs.com/lykkk/p/10631242.html
Copyright © 2020-2023  润新知