2011-03-15 154 views
0

我知道,当一个对象作为参数调用一个函数来调用拷贝构造函数的一种方式是。拷贝构造函数++

例如

class A 
{]; 

A object; 

function(object);//here i have called a function with the class A's object. 

supose如果函数的声明

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

将拷贝构造函数将现在叫?

+3

为什么不试试看? – Beta 2011-03-15 01:32:26

回答

3

没有也不会,因为你正在传递一个引用到现有的对象。您不像前面的示例中那样复制对象。

声明“来称呼当一个对象作为参数调用函数的拷贝构造函数是一种方式”是一种误导。复制构造函数未被调用,因为该对象被用作参数。仅当对象通过值传递给函数时才会调用该对象,在这种情况下,该对象的副本将在另一个内存位置创建,并且函数会将此新副本视为其参数。

相反,如果参数由参考(void function(A &obj1))传递然后发生的事情是,编译器可以访问相同的对象到被调用的函数。这是通过让函数知道对象已存在的内存位置来完成的。没有复制。

了解更多关于引用参数here

+0

不,它实际上是发送对象的引用(本质上是另一个变量),因此与对象调用没有任何关系。 – AbiusX 2011-03-15 01:48:42

+0

@AbiusX:我不太明白你想说什么。 – Jon 2011-03-15 01:49:41

1

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