2010-06-15 57 views
0

可能重複:
question about copy constructorC++指針和構造

如果我有代碼的這個片斷

A a1(i); 
A a2 = a1; 
A *pa1 = new A(a2); 

可以請人確切地解釋的最後一行做什麼,它使a2的副本和這個新對象的指針是pa1,或者它只是創建指針fo r a2,提前致謝

+2

請不要重複提問。此外,當你知道這是一個重複的事實(你問另一個)。 – 2010-06-15 07:47:00

回答

3

最後一行創建一個新的對象A,pa1指向它,其內容與a2中的相同。

我相信這個例子演示了使用帶有參數(第一行),拷貝構造函數(第二行)和另一個拷貝構造函數(最後一行)的構造函數。最後,所有三個對象都將具有相同的內容。

+1

第二行可能是複製縮尺(嘗試它) – 2010-06-15 06:49:02

+0

你是對的。我編輯了我的答案。 – PeterK 2010-06-15 06:54:40

2

在第1行中,您將創建一個A對象,調用A構造函數,傳入1,並將其指定給a1

在第2行,您正在複製a1

在第3行,您要創建一個新的A對象,調用A拷貝構造函數,傳入複製的對象a1,並在內存中返回一個指針到該對象。

+0

第3行:您的意思是複製構造函數。 – Alan 2010-06-15 06:10:51

+0

請小心在上一段中如何使用術語「新」 – 2010-06-15 06:50:13

2

第一行創建堆棧上的類(A1)的一個新實例(因此它的壽命被限制在當前的範圍內)。使用的構造函數將取決於的類型i

第二行將在堆棧上創建A類的另一個實例(a2)。複製構造函數將被使用,所以如果複製操作是合理實現的(或默認的對你的類有意義),它將是源實例的副本(a1)。如果沒有兼容的拷貝構造函數可以訪問,則會發生編譯器錯誤。

第三行返回一個指向分配在堆上的類A(pa1)的新實例的指針。它的生命週期必須明確管理,實際的對象可以超越指針本身的範圍。與第二種情況一樣,它使用複製構造函數進行復制。