文章目录
在日常生活中,要记得时常备份。所以会常常将某个目录下的文件打包,然后下载到本地。
一、测试资源释放
接下来探讨一个问题,return,程序退出时会调用析构函数么。比如 main() return 0 时。因为程序越来越大时,所占用的资源就越多,程序退出的时候要去释放资源。
现在就来测试一下程序退出时,会不会主动去调用析构函数。
1.程序用 return 退出
(1)测试代码,对象定义为全局变量
#include "_freecplus.h"
class A
{
public:
A();
~A();
};
A::A()
{
printf("调用了A()\n");
}
A::~A()
{
printf("调用了~A()\n");
}
A a;// 定义一个A类
int main()
{
return 0;
}
测试结果如图:
程序在使用 return 退出程序的时候,类的对象定义为全局变量时,会自动调用析构函数。
(2)测试代码,类对象定义为局部变量
int main()
{
A a;
return 0;
}
测试结果如图:
程序在使用 return 退出程序的时候,类的对象定义为局部变量时,会自动调用析构函数。
(3)总结
程序在使用 return 退出程序的时候,类的对象无论定义为局部变量还 是全局变量,都会自动调用析构函数。
2.程序用 exit() 退出程序
有时候,也会用 exit() 退出程序,那如果用它退出程序,资源的释放情况会怎么样呢。
(1)类的对象定义为全局变量
#include "_freecplus.h"
class A
{
public:
A();
~A();
};
A::A()
{
printf("调用了A()\n");
}
A::~A()
{
printf("调用了~A()\n");
}
A a;// 定义一个A类
int main()
{
exit(0);
}
测试结果如图:
程序在使用 exit() 退出程序的时候,类的对象定义为全局变量时,会自动调用析构函数。
(2)类的对象定义为局部变量
int main()
{
A a;
exit(0);
}
测试结果如图:
程序在使用 exit() 退出程序的时候,类的对象定义为局部变量时,不会自动调用析构函数。
(3)总结
程序在使用 exit() 退出程序的时候,类的对象定义为全局变量时,会自动调用析构函数。
程序在使用 exit() 退出程序的时候,类的对象定义为局部变量时,不会自动调用析构函数。
二、检测程序资源释放
根据上面的测试,要注意在程序中使用 exit() 退出程序时,这个程序内是否要释放资源,如果要释放资源要将变量的作用范围改为全局的。去检查修改程序。