C new物件與直接宣告物件區別

2021-10-05 04:21:02 字數 870 閱讀 6033

剛開始使用基本資料型別的時候,相信大家都是直接像下面這樣直接宣告變數。

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乙個物件,可以將該物件的指標返回回去,該物件依舊存在。而宣告的物件的生命週期只存在於宣告了該物件的函式塊中,如果返回該宣告的物件,將會返回乙個已經被銷毀的物件。可以看看...