随笔 - 576  文章 - 0  评论 - 62  阅读 - 219万

C++ 析构方法

1、什么是析构方法?

  析构方法与构造方法互补。

2、为什么设计析构方法?

  构造方法创建一个对象,对象内部往往还会申请一些资源。设计析构方法的目的是 释放资源,同时销毁自身。

3、析构方法可以认为分为两个:显式析构方法和合成析构方法。

  显式析构方法用于:释放对象申请的资源,也就是指针指向的对象。

  合成析构方法用于:销毁自身,对于对象的每一个数据成员(不包括继承的数据成员),进行析构。继承的数据成员通过父类的合成析构方法进行析构。

4、即使编写了显示析构方法,合成析构方法仍然会运行。首先使用显式析构方法释放资源,再调用合成析构方法销毁自身。

5、如果对象没有申请资源,显式析构方法不需要做任何事,也就不需要编写显式析构方法。

6、构造析构的顺序:父类构造方法初始化对象的父类部分,子类构造方法初始化对象的子类部分。子类合成析构方法销毁对象的子类部分,父类合成析构方法销毁对象的父类部分。

7、显示析构方法会影响到合成析构方法的调用,调用当前类的显式析构方法,就会调用当前类的合成析构方法,销毁对象的自身部分,再调用父类的合成析构方法,销毁对象的父类部分。

8、一个类作为父类,他的析构方法必须是virtual,为什么?

  考虑,父类的显式析构方法是non-virtual,父类指针指向子类对象,delete父类指针。过程是:调用父类的显式析构方法,调用父类的合成析构方法,只销毁对象的父类部分,导致诡异的部分销毁对象。

  如果父类的显式析构方法是virtual,调用子类的显式析构方法,调用子类的合成析构方法,销毁子类部分,调用父类的合成析构方法,销毁父类部分。

9、显式析构方法没有形参,没有返回值,因此,不能过载。

10、什么情况下,执行析构方法?

  a、对象离开生存空间,也就是超出作用域。

  b、使用delete指针

  c、程序异常,栈展开的时候

11、显式析构方法和合成析构方法都是隐式调用的,合成析构方法就是对自身包含的每一个对象,进行析构。

posted on   Andy Niu  阅读(2789)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示