析构函数的作用的疑问

tiantangniao232 2007-11-20 09:32:45
#include <iostream>
using namespace std;

class CAdd
{
public:
CAdd(int val)
{
cout<<"Parameter"<<endl;
_val = val;
}
CAdd(const CAdd &add)
{
_val = add._val;
cout<<"Copy"<<endl;
}
CAdd operator + (const CAdd &b)
{
return CAdd(_val + b._val);
}
friend ostream& operator << (ostream &os, const CAdd &out)
{
os<<out._val;
return os;
}
~CAdd( )
{
cout<<"~CAdd( )"<<endl;
}
int _val;
};

int main( )
{
CAdd a(5),b(7);
CAdd sum = a + b;

cout<<sum._val<<endl;
return 0;
}
有析构函数的时候输出:
Parameter
Parameter
Parameter
12
~CAdd( )
~CAdd( )
~CAdd( )
没有析构函数的时候输出:
Parameter
Parameter
Parameter
Copy
Copy
12
为什么没有析构函数时会多调用两次Copy构造函数呢?
...全文
188 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shakaqrj 2007-11-20
  • 打赏
  • 举报
回复
我也是xp,但是没有sp
雪狼__ 2007-11-20
  • 打赏
  • 举报
回复
我的VC6在XP下是有的
凤矶 2007-11-20
  • 打赏
  • 举报
回复
我VC6下没有,我装了sp6的。XP系统。
shakaqrj 2007-11-20
  • 打赏
  • 举报
回复
...
我的是伟大的创天牌vc6.0
ouyh12345 2007-11-20
  • 打赏
  • 举报
回复
说错了,是有没有析构函数,都没有copy
VC6 + SP6
ouyh12345 2007-11-20
  • 打赏
  • 举报
回复
啊?我的vc6下,没有析构函数的时候,没有copy
独孤过儿 2007-11-20
  • 打赏
  • 举报
回复
g++编译的结果:

Parameter
Parameter
Parameter
12
~CAdd()
~CAdd()
~CAdd()


Terminated with return code 0
Press any key to continue ...
shakaqrj 2007-11-20
  • 打赏
  • 举报
回复
的确,vc6.0下有copy
xugang_2001 2007-11-20
  • 打赏
  • 举报
回复
为什么没有析构函数时会多调用两次Copy构造函数呢?
==================================================
lz,我用你的代码在VC2005下调试发现并没有copy出现,有没有稀够都一样的,你是什么环境

64,654

社区成员

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

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