析构函数,就是善后处理,该对象的生命周期结束了,它负责善后的一些工作,如释放已分配的内存等。你将该对象delete掉时,析构函数就自动执行了,不用你去调用它的。
简单的举个例子:
假如有
class
test
{
void
test()
{
new
a
}
~test(){
delete
a;
a
=
null;
printf("析构函数执行了");
}
}
那么在mian
函数中,你new
了一个
test
对象后,再将它delete
掉,这时析构函数~test();就自动执行了,释放
a
的内存,并打印出"析构函数执行了"。
如果你自己不实现系统会帮你实现,不过系统实现的析构函数什么也不做。你自己实现的目的是delete掉你new的东西。比如你有一个类class
Test,析构函数就是:~test(){delete
a;
a=NULL;};
a就是你Test类中new的对象
系统生成的默认析构函数只会释放对象本身所占据的内存,对象通过其他方式如动态内存分配(new)和打开文件等方式获得的内存和系统资源是不会被释放的。
如果你自定义了一个,系统就不会生成默认析构函数,而采用你定义的这个。
因为C++是一个非常有趣的语言,他希望用户可以自己定义类型
他希望用户能把世间万物都抽象成对象来进行处理
有一些东西在创建的时候,是需要特别关注的
比如说你建立了一个数据库对象
那么这个数据库可以存什么样的数据,存多少数据,这些东西需要在创建之初就确定下来。所以使用构造函数,在程序一创建的时候就规定出来
而析构函数是在用户不需要这个对象的时候,销毁一些东西而准备的
比如说银行账户,你销卡了,银行就需要删除你这个账户,需要清除你的个人信息,需要关掉网银。这一系列的东西都是销毁一个账户所必须的步骤。那么这些步骤就集中在析构函数中处理
从初学者的角度来说。有的时候你创建一个对象,需要保存的信息是new出来的。比如说
class A
{
private:
char name;
}
这个name是使用new出来的空间保存的。
那么构造函数里就可以写A(){name = new char[40];}
既然是new出来,为了防止内存泄露,我们必须归还这些申请的空间
那么在这个对象被销毁时,我们就需要调用析构函数
~A(){delete[] name;}
这样就非常方便,利于 *** 作和理解,出错的几率也将大大降低
说了好多,求打赏
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)