析构函数1、基本介绍析构函数是对象销毁时自动调用的特殊成员函数用于释放资源析构函数名称为~【类名】无参数无返回值一个类只有一个析构函数不写则编译器生成空析构函数析构函数不要手动调用能调用但别这样做会导致重复析构反向顺序自动析构成员变量2、演示#includeiostreamusingnamespacestd;classMyTest{public:~MyTest(){cout释放资源endl;}};intmain(){{MyTest mytest;}cout已离开作用域endl;return0;}# 输出结果 释放资源 已离开作用域#includeiostreamusingnamespacestd;classStringBuffer{private:char*data;size_t size;public:StringBuffer(constchar*str){sizestrlen(str);datanewchar[size1];strcpy(data,str);cout构造: dataendl;}~StringBuffer(){cout析构: dataendl;delete[]data;// 释放堆内存}voidprint(){cout内容: dataendl;}};intmain(){{StringBuffersb(Hello World);sb.print();}cout已离开作用域endl;return0;}# 输出结果 构造: Hello World 内容: Hello World 析构: Hello World 已离开作用域3、补充学习析构函数不要手动调用#includeiostreamusingnamespacestd;classMyTest{public:~MyTest(){cout释放资源endl;}};intmain(){{MyTest mytest;mytest.~MyTest();}cout已离开作用域endl;return0;}# 输出结果 释放资源 释放资源 已离开作用域反向顺序自动析构成员变量#includeiostreamusingnamespacestd;classMember{string name;public:Member(constchar*n):name(n){cout成员构造: nameendl;}~Member(){cout成员析构: nameendl;}};classContainer{Member m1,m2;public:Container():m2(m2),m1(m1){cout容器构造endl;}};intmain(){Container c;return0;}# 输出结果 成员构造: m1 成员构造: m2 容器构造 成员析构: m2 成员析构: m1