我在互联网上找到了这个代码。我对复制构造函数的调用有点困惑,我只是想知道为什么在调用display函数时调用复制构造函数?
#include<iostream>
using namespace std;
class myclass
{
int val;
int copynumber;
public:
//normal constructor
myclass(int i)
{
val = i;
copynumber = 0;
cout<<"inside normal constructor"<<endl;
}
//copy constructor
myclass (const myclass &o)
{
val = o.val;
copynumber = o.copynumber + 1;
cout<<"Inside copy constructor"<<endl;
}
~myclass()
{
if(copynumber == 0)
cout<<"Destructing original"<<endl;
else
cout<<"Destructing copy number"<<endl;
}
int getval()
{
return val;
}
};
void display (myclass ob)
{
cout<<ob.getval()<<endl;
}
int main()
{
myclass a(10);
display (a);
return 0;
}
答案 0 :(得分:3)
在display
方法中,您通过值传递参数,因此显然会创建一个副本并将其发送到该函数。了解difference of pass by value and reference。 this和this教程可能很有用。
答案 1 :(得分:0)
正在调用它,因为您传递的是对象值而不是const引用。如果你传递了const myclass& ob
,那么复制构造函数就不会被调用。但是,您的函数设置为创建参数的副本(即,您的函数在副本上运行,而不是原始对象)。