读书人

小白 c++确定复制构造函数的执行次

发布时间: 2014-01-12 00:03:16 作者: rapoo

小白求救 c++确定复制构造函数的执行次数时参数为什么是引用
比如A(A&one){cout<<"复制构造函数";}是来确定复制构造函数执行次数的,但是为什么参数要是它(A&one)呢?教程说按值传递会使用对象的副本,这时候就会执行复制构造函数,但是参数必须是像(A&one)这样的引用类型吗?
[解决办法]
A(A one);

你不用引用A& one你先试试看有什么效果,在编译器中执行一下...就知道了



不用引用:
传参的时候就会产生副本,而副本也是调用复制构造函数,这样是不是死循环了?

这种问题,自己跑一下就知道了


[解决办法]

引用:
还有一个问题求救
class A
{
public:
A(){}
A(A& one){cout<<"复制"<<endl;}
};
情况一: 情况二:
void main() void main()
{A a;
A b=A (a);}
{ A a; 输出了2个复制
A b;
b=A(a);}
输出了1个复制
情况一可以看成是对类b的赋值吗?情况二可以看成是对类b的初始化吗?为什么输出结果不一样?

情况2中
A b=A(a);
A(a)先用复制构造函数创建了一个临时对象,输出一次“复制”
再调用一次复制构造函数用该临时对象初始化b,再输出一次“复制”

读书人网 >C++

热点推荐