析构函数

来源:互联网 发布:建筑工程招投标软件 编辑:程序博客网 时间:2024/05/14 22:53
析构函数是 这种格式: ~类名(); 无返回值

析构函数是为了在某个对象即将释放时对该对象的一些内存信息进行释放所产生的一种函数

析构函数大致有四种情况。

1:如果在一个函数中创建一个对象,当函数将要结束时,析构函数将会被调用.

2:如果该对象是一个static 对象则不会,因为当函数结束时,这个对象并没有释放,所以函数结束时析构函数不会调用,只有当main函数结束时或者,调用exit结束主程序时,会调用该对象的析构函数

3:如果是全局对象,也是在main函数结束时调用析构函数

下面是简单例子:
//helloWorld.h

#include <iostream>
using namespace std;
class helloWorld
{
public:
~helloWorld();
void function();
void function_1();

};
====================================
// helloWorld.cpp

#include "helloWorld.h"
using namespace std;

helloWorld::~helloWorld()
{
cout<<"析构函数被调用\n";
cout<<"析构函数结束\n";

}
void helloWorld::function_1()
{
cout<<"function_1函数被调用\n";

cout<<"function_1函数结束\n";

}
void helloWorld::function()
{

cout<<"function函数被调用\n";
static helloWorld a;//假若该对象不是static 对象,则该对象的析构函数将在function_1函数结束时被调用
a.function_1();

cout<<"function函数结束\n";


}
==============================
//main.cpp

#include "helloWorld.h"
int main()
{cout<<"主函数开始\n";
helloWorld a;
a.function();
cout<<"主函数《将要》结束\n";

return 0;
}


//结果:主函数开始
function函数被调用
function_1函数被调用
function_1函数结束
function函数结束
主函数《将要》结束
析构函数被调用
析构函数结束
析构函数被调用
析构函数结束
请按任意键继续. . .

<h1>如上</h1>


===============

4:通过new动态创建的对象,在用delete释放时,则先调用该对象的析构函数 :

helloWorld* a=new helloWorld;
a->function_1();

执行结果为;
主函数开始
function函数被
function_1函数
function_1函数
function函数结
主函数《将要》
析构函数被调用
析构函数结束

没有通过delete则不执行两次 析构函数

如果在调用function_1后  delete对象则结果为:
主函数开始
function函数被调用
function_1函数被调用
function_1函数结束
析构函数被调用//这里是delete 立刻就被调用了
析构函数结束
function函数结束
主函数《将要》结束
析构函数被调用
析构函数结束
0 0