在C++中当定义的A对象具有B对象成员时!

想在A的构造函数中调用B的构造函数对B进行初始化,为什么必须在初始化列表中?是由于,初始化列表优先与构造函数执行吗?实验了一下,发现是先创建成员B再创建对象A的!所以在不... 想在A的构造函数中调用B的构造函数对B进行初始化,为什么必须在初始化列表中?是由于,初始化列表优先与构造函数执行吗? 实验了一下,发现是先创建成员B再创建对象A的!所以在不调用B的设置函数的前提下,想要初始化B,只能以列表的形式? 求详细解说。。。 展开
 我来答
ennano
2016-05-25 · TA获得超过1744个赞
知道小有建树答主
回答量:813
采纳率:100%
帮助的人:299万
展开全部
1:A的构造函数内,是可以调用B的构造函数进行初始化的,但是B必须有默认构造函数。
2:构造函数里面有3种类型不能初始化,const成员,引用成员,没有默认构造函数的成员
3:初始化列表确实是优先于构造函数执行,一般来说,先初始化静态成员,然后处理初始化列表,然后处理构造函数。
4:初始化列表的性能比构造函数略高一点,尤其外部类型或者对象情况下。
更多追问追答
追问
B有默认构造函数的情况是明白了的,相当于在定义的时候就完成了。。
请问,当是调用B的有参构造函数时,对象A的具体创建流程,及初始化过程能解释一下吗?
追答
对象A的创建过程和是否有B成员没有关系,一个对象初始化一般如下流程:
1:根据语句顺序初始化const成员和静态成员(在栈区)
2:申请A对象内存(在堆区)
3:根据成员的声明顺序,一个一个初始化(请注意是按照声明顺序,不是按照初始化列表中的顺序)
3-1:如果成员在初始化列表,调用初始化列表指定的构造函数
3-2:如果成员不再初始化列表,调用默认构造函数
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式