2011-02-08 56 views
16

以下哪個是myClass的構造函數?何時調用構造函數?

1. myClass class1; 
2. myClass* class1; 
3. myClass* class1 = new myClass; 

非常感謝

+5

這是否需要功課標籤? – user535617 2011-02-08 15:11:11

+5

@ user535617 - 或面試問題標籤... – 2011-02-08 15:12:16

回答

29
  1. 是 - 默認的構造函數,例如在堆棧中創建
  2. 沒有
  3. 是 - 默認的構造函數,例如在堆上創建
1

1和3 ,因爲在他們你創建一個myClass對象。

1

當實例化類時,將在情況1和3中調用構造函數。另一個(2)只聲明一個指針。

4

在#1和#3中,因爲您實際上正在製作對象的實例。在#2中,你只是聲明瞭一個不指向實例的指針。

4
  1. 該語句會在堆棧中創建一個對象,並調用c'tor。
  2. 僅定義堆棧上的指針變量,不調用構造函數。
  3. 新運算符將在免費商店(通常是堆)中創建一個對象並調用c'tor。

但是這段代碼不會實例化任何對象,因爲它不會編譯。 ;-)嘗試這一個:

myClass class1; 
myClass* class2; 
myClass* class3 = new myClass; 
  • 類1是一個局部變量(在棧上),構造函數調用。
  • 類2是一個指針,沒有構造函數調用。
  • 類3是一個指針,當執行new時調用構造函數。
相關問題