淮安军星科技学院黄涛:C++中有关拷贝构造函数的问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/28 00:04:53
#include<iostream.h>
class Tclass
{
public:
Tclass(){}
Tclass(Tclass &p)
{ cout<<"Copy_Initialization Constructor Called.\n"; }
~Tclass(){ cout<<"Destructor Called.\n"; }
};
Tclass fun(Tclass Q)
{
Tclass R;
return R;
}
void main()
{
Tclass P,N;
P=fun(N);
}
运行结果:
Copy_Initialization Constructor Called.
Copy_Initialization Constructor Called. (1)
Destructor Called.
Destructor Called.
Destructor Called.
Destructor Called.
Destructor Called.
(1)处的结果是由于在执行return R;语句时,系统用返回值初始化一个匿名对象使用了一次拷贝初始化构造函数。这里产生的匿名对象是否是由于执行完fun()函数时R已经被释放?这里的匿名对象是否相当于一个中间变量,用以保存R?

呵呵,LZ自己已经分析的很透彻了,是不是对自己没信心啊?
R在return后释放,第一行是赋参引起的copy,第二个是R由于局部对象释放前return引起的copy.