剛開始使用基本資料型別的時候,相信大家都是直接像下面這樣直接宣告變數。
int a;
double b;
在學習了物件之後,發現可以用兩種方式宣告物件。
class
person
intmain()
那麼這兩種方式有什麼不同點呢?
1.new出來的物件必須用指標接收,需要顯示的delete銷毀
2.記憶體位置不同
直接定義
person p1;
這樣產生的p1物件再棧空間。
new物件
person *p2 =
newperson()
;
這樣產生的p1物件再堆空間。
3.效率問題
直接定義效率更高,頻繁呼叫的場合並不適合new,總要去申請釋放記憶體系統開銷更大。
4.作用範圍
new出來的物件指標可以在方法之間傳遞,並且這個物件指標所指向的堆中的物件例項仍然存在,直接宣告的物件是區域性的,出了方法就沒有了。
5.記憶體分配時機
使用普通方式建立的類物件,在建立之初就已經分配了記憶體空間。而類指標,如果未經過物件初始化,則不需要delete釋放。
person *p2 =
null
;
此時不需要delete,delete就錯了,不知道指標初始值指向那裡,會有意想不到問題出現。 C new物件時有無()的區別
情況1 類中顯式定義了預設建構函式 此時new test 和new test並無區別,都會呼叫定義的建構函式,所以下面程式中的輸出結果一樣。class test int getnum int main 輸出結果 1 1 請按任意鍵繼續.情況2 沒有定義預設建構函式也沒有虛函式 此時編譯器會生成乙個預...
new建立物件和直接宣告建立物件
有時候書看多了,遇到了以前沒注意到的小細節就會犯迷糊,查了些資料大致弄明白了點關於 new物件和直接引用物件的區別。眾所周知,在c 裡面可以new物件,也可以直接宣告物件。編譯器把記憶體分為三個部分 1.靜態儲存區域 主要儲存全域性變數和靜態變數。生存期 整個程式。2.堆 儲存動態生成的變數。生存期...
C 中宣告物件與new物件的區別
new出來的物件是直接放在堆上,而宣告乙個物件是放在棧中。換句話說,new出來的物件的生命週期是全域性的,譬如在乙個函式塊裡 new乙個物件,可以將該物件的指標返回回去,該物件依舊存在。而宣告的物件的生命週期只存在於宣告了該物件的函式塊中,如果返回該宣告的物件,將會返回乙個已經被銷毀的物件。可以看看...