2011-03-15 260 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的內存地址。