#include <iostream>
#include <string.h>
using namespace std;
class A
{
public:
A(){cout<<"<";}
A(A &b){cout<<"#"<<endl;}
~A(){cout<<">";}
};
A c(A &d)
{
A f(d);
return f;//会产生临时对象?临时对象调用一次构造函数
}
int main()
{
A a;
a=c(a);//c(a)会产生一个临时对象,然后用临时对象给a复制,在本句结束时,临时对象析构;
A cc=c(a);//这句为什么比上一句少了一次析构?
cout<<endl;
return 0;
}
上面这段程序在vs2008下执行时a=c(a);调用c()会导致两次构造 两次析构 我知道其中一次构造和析构是函数的局部变量f,剩下的一次构造和一次析构是?是不是说c()函数产生一个临时对象用来存放返回值?而下面那一句A cc=c(a);为什么比上面少了一次析构
#include <string.h>
using namespace std;
class A
{
public:
A(){cout<<"<";}
A(A &b){cout<<"#"<<endl;}
~A(){cout<<">";}
};
A c(A &d)
{
A f(d);
return f;//会产生临时对象?临时对象调用一次构造函数
}
int main()
{
A a;
a=c(a);//c(a)会产生一个临时对象,然后用临时对象给a复制,在本句结束时,临时对象析构;
A cc=c(a);//这句为什么比上一句少了一次析构?
cout<<endl;
return 0;
}
上面这段程序在vs2008下执行时a=c(a);调用c()会导致两次构造 两次析构 我知道其中一次构造和析构是函数的局部变量f,剩下的一次构造和一次析构是?是不是说c()函数产生一个临时对象用来存放返回值?而下面那一句A cc=c(a);为什么比上面少了一次析构
解决方案 »
- 子进程的stdin重定向后,子进程立即退出了
- WINDOWS网络与通信程序设计一书第9章代码问题
- 散分
- 我想做一个弹出菜单,弹出菜单改变北京颜色或者加背景图片,还可以在菜单里加图标的!
- 学习VC++6.0好还是VC.NET
- 如何不通过注册表获取移动硬盘和U盘的盘符,请各位大侠再指点一二(特邀suisuibianbian(随随便便.Ah(蓝过天).xstring(0麻雀).visualli
- 一个关于gina的问题,散分...
- 怎么在vc++6.0 的 classwizard里面删掉一个类?
- 用MFC做示波器的界面具体思路是什么样的,求大神赐教
- 求PID算法中的参数自整定程序(C语言或DELPHI)--最好使用Z-N(Ziegler-Nichols)设定方法
- 开始上班了,散分
- 根据ip查看流量
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~没少吧,也是两次啊。
但各个编译器的行为对此并不统一
可以看下effective C++,有一节介绍