析构函数

来源:互联网 发布:oracle创建表的sql语句 编辑:程序博客网 时间:2024/06/08 03:20

先要知道析构函数是什么用的:

{

析构函数是当对象脱离其作用域时,系统会自动执行析构函数。就是相当于清理善后的作用。

比如你在一个函数中申请了一块内存空间来一个对象(对象是什么呢? 比如我有一个 class A  然后我写 A mywork; 

A是一个类, mywork则是对象, 并且这个对象的类型是A这个类),你调用完这个函数之后, 这个对象如果没有用了,我们不应该把这个对象留着浪费空间,虽然电脑内存很大,

但是如果一个小程序中没有释放申请的空间的话,有很可能就会导致电脑内存耗尽。所以我们要释放这个对象的空间。析构函数就是释放这个空间的作用(和构造函数是相反的)

}

 

来看下下面这段程序

#include<iostream>
using namespace std;
class T
{
public:

~T()
{
cout<<"析构函数被调用。";  // 这个是自定义的析构函数
}
};

// 析构函数可以自己重新定义,如果不写的话,编译系统会自动生成一个析构函数 但它不会进行任何操作
int main()
{
T *t=new T;//建立一个T类的指针对象t
delete t; // 释放 t这个对象的内存空间
}

到底是什么时候调用~T()这个析构函数的呢?

我在~T()这个析构函数里加了 cout<<"析构函数被调用。";  这个语句

如果我们不知道什么时候调用析构函数  加了这句 我就知道什么时候被调用了 因为被调用的时候 屏幕上会输出

"析构函数被调用。这段文字  

所以可以把delete t;这句去掉 会发现屏幕上没出现"析构函数被调用。这段文字 加上去delete t;
就出现了"析构函数被调用。"这句 说明加上去之后 析构函数被调用了。  

说明析构函数是在释放内存空间的时候才会被调用,你也可以在析构函数里加上释放内存空间的语句,这样不用你手动去释放内存空间,当这个对象的作用域结束之后,他自己会

调用析构函数,从而也会执行你在析构函数里写的释放内存空间的语句。

 

0 0
原创粉丝点击