new建立物件和直接宣告建立物件

2021-06-01 12:27:36 字數 1051 閱讀 3353

有時候書看多了,遇到了以前沒注意到的小細節就會犯迷糊,查了些資料大致弄明白了點關於 new物件和直接引用物件的區別。

眾所周知,在c++裡面可以new物件,也可以直接宣告物件。

編譯器把記憶體分為三個部分:

1.靜態儲存區域:主要儲存全域性變數和靜態變數。 生存期:整個程式。

2.堆:儲存動態生成的變數。生存期:自己來決定。

3.棧:儲存呼叫函式相關的變數和位址等。生存期:所處的語句塊(既{}的範圍)

假設定義乙個類myclass

(1)宣告建立物件

我們要建立物件的時候就是直接  myclass myclass;  這時在中已經為它分配了乙個空間存放所有的成員變數,但是為了節約記憶體空間成員函式被存放在了乙個公共區域,這個類的所有的物件都可以共同享有。

呼叫這個物件的成員變數和成員函式時用「.」操作符。如:myclass.value,myclass.function()。

(2)new 物件

用這種方法建立物件時我們採取這樣的方法  myclass *myclass = new myclass();   通過new建立的例項返回的是物件指標(myclass指向乙個myclass的物件),同時在上為它分配空間,並且需要顯式的釋放空間, delete 物件的時候才會呼叫物件的析構函式。

因為是指標的操作,所以呼叫這個物件的成員變數和函式時要用「->」 例如 myclass.value ,myclss->function()。

總結

事實上兩種方式效果相同,我們在選擇用哪種方式的來建立的時候主要考慮的就是,你想讓這個物件存活多久。

C 用new來建立物件和非new來建立物件的區別

我們都知道c 中有三種建立物件的方法,如下 include using namespace std class a a int main 第一種和第二種沒什麼區別,乙個隱式呼叫,乙個顯式呼叫,兩者都是在程序虛擬位址空間中的棧中分配記憶體,而第三種使用了new,在堆中分配了記憶體,而棧中記憶體的分配和...

C 用new來建立物件和非new來建立物件的區別

我們都知道c 中有三種建立物件的方法,如下 include using namespace std class a a int main 第一種和第二種沒什麼區別,乙個隱式呼叫,乙個顯式呼叫,兩者都是在程序虛擬位址空間中的棧中分配記憶體,而第三種使用了new,在堆中分配了記憶體,而棧中記憶體的分配和...

C 用new和不用new建立類物件

1,new建立類物件,使用完後需使用delete刪除,跟申請記憶體類似。所以,new有時候又不太適合,比如在頻繁呼叫場合,使用區域性new類物件就不是個好選擇,使用全域性類物件或乙個經過初始化的全域性類指標似乎更加高效。2,非new建立類物件,建立方式,new物件指標作為函式引數和返回值需要手動釋放...