C++学习笔记08-析构函数

一,析构函数

析构函数没有形参,
~类名()
{
// 方法体
}
组成
负责对类资源的回收,
①delete动态内存资源,防止内存泄漏,
②更新类的一些信息,比如对象总数量自减1
③也没有返回值
④不能被重载,析构函数是唯一的

①旧知复习

(Ⅰ)初始化列表初始化顺序

初始化列表用于构造函数,那么初始化列表的顺序就会按照类定义中声明的顺序去初始化
而非初始化列表的顺序

(Ⅱ)多重继承时调用构造器的顺序

继承符号 : 后面依次继承多个类
按照从左到右的继承顺序去调用基类的构造函数

class Base1{}
class Base2{}
class Base3{}
class Derived : public Base3 , public Base1 , public Base2{}

那么就会依次调用Base3(),Base1(),Base2()构造函数

②回到析构函数的销毁顺序

先执行函数体,再依次销毁成员,成员按照初始化顺序逆序销毁
千万注意!!!:
(Ⅰ)隐式销毁一个内置指针成员并不会delete它所指向的对象
(Ⅱ)当指向一个对象的引用或指针离开其作用域时,其析构函数不会被执行
也就是说,你动态申请的内存,必须要手动释放,即使析构函数销毁了该指针,也不会释放该动态内存!!!
与智能指针有区别的是:
智能指针能自动释放它所管理的内存,是因为它是类对象,而非普通的内置指针,类对象超出了
它的作用域范围之后,就会自动析构
,而智能指针的析构函数内存管理可以自动delete该成员
管理的内存,因此不需要担心

二,何时调用析构函数

无论一个对象合适被销毁,就会自动调用其析构函数

①变量在其离开作用域后被销毁
②当一个对象被销毁时,其成员被销毁
③容器(无论是标准库容器还是数组,)被销毁时,其元素被销毁
④对于动态分配的对象,当指向它的指针被用于delete时,被销毁
⑤对于临时对象,当创建它的完整表达式结束时被销毁

三,合成析构函数

当类中未定义析构函数时,编译器自动合成一个无任何代码的析构函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿维的博客日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值