为什么有这玩意
主要作用:释放new出来的空间
class Person{
public:
int * scores;
Person() {
// new出来的这部分空间不会被自动释放
scores = new int[5];
}
// 下面这个函数,会在对象消亡时自动调用,释放掉new出的空间
~Person() {
delete []scores;
}
};
定义
~类名(){}
没有返回值,没有参数
只能有一个
自定义析构函数后,就不再生成默认的析构函数。默认的析构函数,不会释放new出的内存空间。
~Person() {
// ...
}
调用时机
在一个类生成对象时,会调用构造函数。在一个对象消亡的时,会调用析构函数
#include <iostream>
#include <stdio.h>
using namespace std;
class Demo {
int id; public:
Demo( int i ) {
id = i;
cout << "id=" << id << " Constructed" << endl; }
~Demo() {
cout << "id=" << id << " Destructed" << endl; }
};
Demo d1(1); // 全局变量,最先创建
void Func(){
static Demo d2(2); // 静态局部变量,从函数调用时生成,在整个程序结束时,88
Demo d3(3); // 局部变量
cout << "Func" << endl;
}
// 创建完全局变量后,进入main函数
int main (){
Demo d4(4); // 局部变量
d4 = 6; // 类型转换构造函数,相当于,d4 = Demo(6); Demo(6)是一个临时变量,创建完赋值给d4,然后就88了
cout << "main" << endl;
{ Demo d5(5); } // 局部代码块,作用域就在大括号中,所以创建完,代码块执行完,就88了
Func();
cout << "main ends" << endl;
return 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。