C++关于参数是对象时要调用拷贝构造函数进行传参的问题探讨


对象也可以作为函数的参数传递给函数,其转递方法与传递其他类型的数据一样,可采用值传递和地址传递两种方法。

值传递(调用拷贝构造函数)

值传递:是把对象的拷贝而不是本身传递给函数,函数中对参数对象的任何修改都不会影响调用该函数的对象本身;

地址传递(不调用拷贝,直接对原对象进行修改)

地址传递:调用该函数的对象与参数对象共用同一个地址,所以,函数对参数对象的任何修改都会影响调用该函数的对象本身。

注意:调用拷贝构造的三种情况

在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”)

1) 一个对象作为函数参数,以值传递的方式传入函数体

2) 一个对象作为函数返回值,以值传递的方式从函数返回

3)一个对象用于给另外一个对象进行初始化(常称为复制初始化,即很明显的直接调用拷贝构造进行对一个对象进行构造初始化)

当用引用变量做参数时,不调用拷贝构造函数,用传递引用的方式给函数传递一个对象的引用时,只传递了该对象的地址,系统消耗较小。在函数体内访问 形参,实际是访问了这个作为实参的对象。例如:void function(CTest & test);

相关问题:

1 、c++,类的对象作为形参时一定会调用复制构造函数吗?

答:如果参数是引用传递,则不会调用任何构造函数;如果是按值传递,则调用复制构造函数,按参数的值构造一个临时对象,这个临时对象仅仅在函数执行是存在函数执行结束之后调用析构函数

2 、如果类中没有定义复制构造函数 那对象就不能作为形参?

答:如果没有定义,编译器会自动为你定义一个,编译器自己定义的复制构造函数是按类成员变量的值复制的。有几个成员变量就重新创建一个对象,那个对象的成员变量和被复制的对象其成员变量的值相同。这里如果成员变量有指针的时候,就会出现多个指针指向同一个对象的问题

相关推荐
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页