c++中的类(构造函数,析构函数的执行顺序)
2024-08-31 13:34:14
类对象的初始化顺序
新对象的生成经历初始化阶段(初始化列表显式或者隐式的完成<这部分有点像java里面的初始化块>)——> 构造函数体赋值两个阶段
1,类对象初始化的顺序(对于没有父类的成员)
1)初始化阶段:该对象的类成员变量,const成员变量,引用成员变量进行显示初始化(由初始化列表决定),如果没有显式初始化,则进行隐式初始化(对于类成员,调用其默认构造函数)。因此对于没有默认构造函数的类成员变量、const成员变量,引用成员变量必须在初始化列表中进行显式初始化;对于内置变量或者复合类型的成员,如果对象再全局作用域,则进行初始化;如果在局部作用域,不进行初始化
2)调用构造函数赋值:略
2,对于含有父类的子类对象初始化
1)调用基类的构造函数
2)初始化阶段:子类对象的类成员变量,const成员变量,引用成员变量进行显示初始化(由初始化列表决定),如果没有显式初始化,则进行隐式初始化(对于类成员,调用其默认构造函数)。因此对于没有默认构造函数的类成员变量、const成员变量,引用成员变量必须在初始化列表中进行显式初始化。对于内置变量或者复合类型的成员,如果对象再全局作用域,则进行初始化;如果在局部作用域,不进行初始化
3)调用自身的构造函数
析构函数的调用顺序总是和构造函数相反,调用了多少次构造函数(包括复制构造函数),就需要调用多少次析构函数。注意复制构造函数在下列场合执行:
复制构造函数
1)根据同类型的对象初始化另一个对象(和赋值运算符的区别在于是否产生新对象)
2)蒋对象作为实参,传递给一个函数,或者从函数返回时复制一个对象
3)初始化容器或者数组元素(这个是在特定规则下,具体细节可以翻书)
最新文章
- [SharePoint 2007/2010]Query SharePoint Calendar Event
- centos 7 mini装maridb 10.1 binary版本
- Android中Services之异步IntentService
- 初学者 的 js 关于checkbox全选的问题
- 根据多年经验整理的《互联网MySQL开发规范》
- DCM TUTORIAL – AN INTRODUCTION TO ORIENTATION KINEMATICS (REV 0.1)
- 一篇不错的讲解Java异常的文章(转载)原作者已没法考证
- Thrift搭建分布式微服务(四)
- 测试-ConstantForce的驱动方式以及是否穿透
- MFC子窗口和父窗口
- 对使命召唤OL游戏中队友能相互救治的动作设定的感慨
- select options常用操作
- 转:VmWare下安装CentOS6图文安装教程
- Android解决异常apk on device &#39;0292bea1&#39;: Unable to open sync connection!
- DirectFB、Layer、Window、Surface之间关系
- 基于REM的移动端响应式适配方案
- oss web直传
- 一文看懂HTTPS的核心知识
- mysql中主外键关系
- 如何在Anaconda中实现多版本python共存