whats is the difference between these three statements in c++ ??
aa *obj;
aa *obj1 = new aa;
aa *obj2 = new aa();
其中aa是一類 我是最後兩個聲明中的confucion。類對象的聲明confucion
whats is the difference between these three statements in c++ ??
aa *obj;
aa *obj1 = new aa;
aa *obj2 = new aa();
其中aa是一類 我是最後兩個聲明中的confucion。類對象的聲明confucion
第一個不初始化指針。
在最新的說明書中,
- 如果省略了新初始化,對象是缺省初始化(8.5);如果不執行初始化,則該對象具有不確定的值。
- 否則,根據8.5的初始化規則對新初始化器進行解釋以進行直接初始化。
也就是說,如果類(你說這是一個類)沒有有一個構造函數,那麼第一種形式將採取同樣作爲本地範圍定義並留下記憶非初始化。
空的初始化程序將強制它初始化,這會得到與該類型的變量全局相同的結果。
如果一個類只包含基本類型的數據成員,那麼它可能沒有構造函數,即使是隱藏的構造函數。你會看到這個被稱爲「POD」或簡單的數據。對於模板,差異被發現是令人討厭的,所以規則可以用()統一用於任何類型,甚至內置類型。 new int()
將給出一個指向值爲0的指針。new int
將給出一個指向一個值的指針,該值指示發生在該地址處的任何垃圾。
根據'aa'的定義,第二個和第三個語句的含義可以不同。 – juanchopanza 2015-04-04 16:08:30
我站好了。我知道它發生了變化,但是後退了。
任何人都可以在此澄清「第一條語句[aa * obj]初始化指針* obj會自動將類aa對象的地址。現在的問題是 - aa的對象在哪裏創建以及它的初始化隱式* obj指針如何? ?因爲我剛剛定義了類aa的指針,但沒有用一個地址初始化它...... ???? – Gaurav 2015-04-04 17:24:24
其中兩個在這裏解釋:http://stackoverflow.com/questions/620137/do-the-parentheses-after-the-type-name-make-a-difference-with-new – chris 2015-04-04 16:02:59
他確實說過是一個類,而不是內置的數據類型。我想這可能是一個POD,但那真的是那些關心的舊編譯器。 – 2015-04-04 16:04:30
@JDługosz重要的是語言規範,而不是編譯器的年齡。 – juanchopanza 2015-04-04 16:09:24