为了账号安全,请及时绑定邮箱和手机立即绑定

为什么临时变量不需要调用构造函数 但函数结束时 会自动调用析构函数销毁临时对象

请问一下 在test1中 如果实例化对象Person对象  为什么不去调用Person 的默认构造函数  而只是在销毁的时候调用 析构函数

正在回答

3 回答

借二楼的理论实践一下:

Person.h中加入

Person(const Person &p);

Person.cpp中加入

Person::Person(const Person &p)
{	
    m_strName = p.m_strName;	
    cout << "Person(const Person &p)" << endl;
}

然后执行便是

https://img1.sycdn.imooc.com//5b1cd9c50001f6ea12230639.jpg

验证了二楼所说,确实是因为调用了拷贝析构函数而不是析构函数

6 回复 有任何疑惑可以回复我~

调用了构造函数啊,只不过调用的是拷贝构造函数,实参传值给形参就是一个拷贝的过程,而拷贝构造函数都没写内容,所以当然不显示出来,但是实际上是调用了的

10 回复 有任何疑惑可以回复我~

首先,临时变量是会调用构造函数的,这是初始化对象必须进行的。

其次,临时变量是栈对象,使用完毕后会被内存自动回收,而删除对象时会调用析构函数,所以会自动调用析构函数啦

0 回复 有任何疑惑可以回复我~
#1

Hurricane_mwb 提问者

为什么不去调用构造函数
2017-11-19 回复 有任何疑惑可以回复我~
#2

qq_慕前端0595576 回复 Hurricane_mwb 提问者

因为传递的方式是Person p=p;(这里你不能当成同名,这是形参和实参间的数据传递),前面讲过,拷贝构造函数在两种情况下执行,分别为 Person p; ①Person p1=p;②Person p1(p);这个属于第一种情况
2019-04-11 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之继承篇
  • 参与学习       75188    人
  • 解答问题       251    个

继承,C++面向对象三大特征之一,通过编码实践方式讲解到操作层面

进入课程

为什么临时变量不需要调用构造函数 但函数结束时 会自动调用析构函数销毁临时对象

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号