拷贝构造函数的问题,有一句代码输出结果不明白

tjucruiser 2011-11-28 11:15:12
#include <iostream.h>

class AAA
{ public:
AAA()
{ cout<<“aaa\n"; }
AAA(int x, int y)
{ cout<<“bbb\n"; }
AAA(AAA &x)
{ cout<<“ccc\n"; }
~AAA()
{ cout<<“ddd\n"; }
};
AAA f1(AAA x)
{ AAA y;
y=x;
return y;
}
void main()
{ AAA p1(10, 20);
AAA p2;
p2=p1;
AAA p3=p2;
AAA p4=f1(p3);
cout<<"eee" ;
cout<<endl;
}

输出结果是:
bbb
aaa
ccc
ccc
aaa
ccc
ddd
ddd
eee
ddd
ddd
ddd
ddd

为什么输出eee前面有两个ddd
多谢
...全文
88 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjucruiser 2011-12-03
  • 打赏
  • 举报
回复
多谢多谢啊
yuegeman 2011-11-28
  • 打赏
  • 举报
回复
我们正在学这啦 还容易看懂
jwybobo2007 2011-11-28
  • 打赏
  • 举报
回复
函数f1中
的AAA x是临时变量还有AAA y,退出函数后,释放,所有有两次析构
qscool1987 2011-11-28
  • 打赏
  • 举报
回复
AAA p3=p2;这个是初始化,调用的复制拷贝,等价于AAA p3(p2);
AAA p4=f1(p3);这个,首先传参发生拷贝,这个拷贝是复制拷贝 同上
其次,内部变量y默认构造
然后,y = x;赋值拷贝 注意这里和上面不一样
一个是 AAA p3=p2;
一个是 AAA y;y = x;
发生的拷贝是不一样
return y;返回值这里又发生一次复制拷贝
xingfeng2510 2011-11-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tjucruiser 的回复:]

明白了,一个局部变量,一个形参数
[/Quote]
嗯,就是这样。
调用f1(p3);涉及到形参的一次构造与一次析构、局部变量的一次构造与一次析构
tjucruiser 2011-11-28
  • 打赏
  • 举报
回复
明白了,一个局部变量,一个形参数

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧