2015-04-04 221 views
0
whats is the difference between these three statements in c++ ?? 
aa *obj; 
aa *obj1 = new aa; 
aa *obj2 = new aa(); 

其中aa是一類 我是最後兩個聲明中的confucion。類對象的聲明confucion

+1

其中兩個在這裏解釋:http://stackoverflow.com/questions/620137/do-the-parentheses-after-the-type-name-make-a-difference-with-new – chris 2015-04-04 16:02:59

+0

他確實說過是一個類,而不是內置的數據類型。我想這可能是一個POD,但那真的是那些關心的舊編譯器。 – 2015-04-04 16:04:30

+0

@JDługosz重要的是語言規範,而不是編譯器的年齡。 – juanchopanza 2015-04-04 16:09:24

回答

1

第一個不初始化指針。

在最新的說明書中,

  • 如果省略了新初始化,對象是缺省初始化(8.5);如果不執行初始化,則該對象具有不確定的值。
  • 否則,根據8.5的初始化規則對新初始化器進行解釋以進行直接初始化。

也就是說,如果類(你說這是一個類)沒有一個構造函數,那麼第一種形式將採取同樣作爲本地範圍定義並留下記憶非初始化。

空的初始化程序將強制它初始化,這會得到與該類型的變量全局相同的結果。

如果一個類只包含基本類型的數據成員,那麼它可能沒有構造函數,即使是隱藏的構造函數。你會看到這個被稱爲「POD」或簡單的數據。對於模板,差異被發現是令人討厭的,所以規則可以用()統一用於任何類型,甚至內置類型。 new int()將給出一個指向值爲0的指針。new int將給出一個指向一個值的指針,該值指示發生在該地址處的任何垃圾。

+0

根據'aa'的定義,第二個和第三個語句的含義可以不同。 – juanchopanza 2015-04-04 16:08:30

+0

我站好了。我知道它發生了變化,但是後退了。 。 – 2015-04-04 16:42:10

+0

任何人都可以在此澄清「第一條語句[aa * obj]初始化指針* obj會自動將類aa對象的地址。現在的問題是 - aa的對象在哪裏創建以及它的初始化隱式* obj指針如何? ?因爲我剛剛定義了類aa的指針,但沒有用一個地址初始化它...... ???? – Gaurav 2015-04-04 17:24:24