关于复制构造函数调用的混淆

时间:2014-05-15 04:52:19

标签: c++ copy-constructor

我在互联网上找到了这个代码。我对复制构造函数的调用有点困惑,我只是想知道为什么在调用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;
}

2 个答案:

答案 0 :(得分:3)

display方法中,您通过值传递参数,因此显然会创建一个副本并将其发送到该函数。了解difference of pass by value and referencethisthis教程可能很有用。

答案 1 :(得分:0)

正在调用它,因为您传递的是对象值而不是const引用。如果你传递了const myclass& ob,那么复制构造函数就不会被调用。但是,您的函数设置为创建参数的副本(即,您的函数在副本上运行,而不是原始对象)。