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

一,析构函数

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

①旧知复习

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

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

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

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

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

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

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

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

二,何时调用析构函数

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

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

三,合成析构函数

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

猜你喜欢

转载自blog.csdn.net/weixin_46028606/article/details/107463478
今日推荐