对象的销毁

生活中的对象都是被初始化后才上市的,这是对象的构造,比如手机出厂前都会有一个默认的出厂设置供客户使用,也会在销毁前做一些清理工作,这是对象的销毁,比如手机回收
一般而言,需要销毁的对象应该做清理
解决方案
为每个类都提供一个public的free函数
对象不再需要立即调用free函数进行清理
存在问题
free只是一个普通的函数,必须显示的调用,很容易忘记使用
对象销毁前没有做清理,很可能造成资源泄露
新方案
C++的类可以定义一个特殊的清理函数,叫做析构函数,它的功能与构造函数相反
定义:~ClassName()
析构函数没有参数也没有返回值类型声明(不能够重载)
析构函数在对象销毁时自动被调用
例子:

#include <stdio.h>
class Test
{
  private:
    int mi;
  public:
  Test(int i)
  { 
     mi = i;
     printf("the i is %d\n",mi);
  }
  ~Test()
  {
     printf("the i=%d is destroy\n",mi);
  }
};
int main(void)
{
   Test t = 2;
   Test *p = new Test(1);
   delete(p);
   return 0;
}

结果:

sice@sice:~$ g++ test.cpp
sice@sice:~$ ./a.out 
the i is 2
the i is 1
the i=1 is destroy
the i=2 is destroy


一般来说,当类中自定义了构造函数,并且构造函数中使用了系统资源(内存申请,文件打开,socket通信),则需要自定义构造函数,析构函数其实是类中提供的特殊构造函数,它在对象销毁时自动被调用(遇到delete,return 0前),是对象释放系统资源的保障

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值