析构函数 及 指针


第一层是系统认识的变量,比如int,int*

这些变量系统会在生存周期结束后自动释放的,当然,你也可以手动地将其释放

第二层是指针指向的动态分配的空间,需要调用delete函数来释放
类里面定义的也无外乎这两种


为何要写析构函数?而且一般定义成 virtual 类型?

你没法去访问类的priviate成员,而且其他使用该类的人也不清楚该如何释放,因此,你需要写析构函数,将你这个类所以第二层的变量空间清除干净。

另外,由于别人有可能需要在你的类基础上进行定义一些东西,对你的程序进行改进。这时候,在主程序各个函数的interface是你定义的基类,delete也是调用你基类的析构函数,这时别人就无法析构自己定义的东西了,所以,你需要把你的析构函数定义成virtual的,这样别人的类会有一个析构函数表,首先调用自己的析构函数,然后调用你的,这样就可以完全析构掉了


在C++里面,任何的指针在delete时候都会调用析构函数,这也就是为什么析构函数必须写成virtual,防止memory leak

在函数中的指针有可能是基类类型的,这样造成的结果就是你析构的时候只析构了基类的成员,而派生类中新定义的成员并未析构,这样就memory leak了,所以需要重新定义析构函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值