在c ++中复制构造函数

时间:2011-03-15 01:30:59

标签: c++

我知道调用复制构造函数的一种方法是将对象用作调用函数的参数。

例如

class A
{];

A object;

function(object);//here i have called a function with the class A's object.
如果函数的声明是

,则

void function(A &obj1);//here the function actually takes the object into a reference.

现在会调用复制构造函数吗?

2 个答案:

答案 0 :(得分:3)

不,它不会,因为您正在传递对现有对象的引用。您没有像上一个示例那样复制对象。

语句“调用复制构造函数的一种方法是将对象用作调用函数的参数”,这是一种误导。未调用复制构造函数,因为该对象用作参数。仅当对象通过值传递给函数时才会调用它,在这种情况下,对象的副本在另一个内存位置生成,函数将此新副本视为其参数。

如果参数通过引用(void function(A &obj1))传递,那么会发生的情况是编译器提供对被调用函数的同一对象的访问。这是通过让函数知道对象已经存在的存储器位置来完成的。没有复制。

详细了解参考参数here

答案 1 :(得分:1)

在这种情况下,没有。传递引用与传递指针相同,因此复制的唯一内容是obj1的内存地址。