C 用new與不用new建立物件的區別

2021-10-05 21:01:31 字數 1047 閱讀 4181

c++建立物件一、alignment問題

重新發現這個問題是因為在體系結構課上提到的乙個概念,alignment對齊的概念。

class myclass ;

像上面這個c++的類,它有兩個變數。

myclass myclass;cout<< sizeof(myclass) << endl;

或者直接算它的大小

cout<< sizeof(myclass) << endl;

然後按照道理,myclass的大小,應該是5 byte才對,可是最後輸出的結果是8,顯然這就說明系統在建立物件的時候,將物件的變數進行了對齊操作,不足4 byte的按照4 byte補足。

2.1 虛函式引起的空間占用:虛函式管理

此外,普通成員函式不會占用物件空間的大小,也不會影響sizeof的結果。

而如果是虛函式就會占用空間了。

class myclass };

結果是占用12 byte的大小。

這種的差別是由於c++的類所有的虛函式都是由乙個虛函式指標所管理,它的虛函式被放在別的記憶體空間中管理。而普通函式是由this指標所管理,this指標並不是物件本身的一部分,所以不會影響到sizeof的結果。

2.2 一些有趣的現象

class myclass ;

long long為8 byte,所以總共占用16 byte。

在分析完各種情況之後,只有第乙個的結果顯得特別詭異,為什麼空類的大小不是0,而是1?

每個類的例項,在記憶體中都有乙個獨一無二的位址,為了達到這個目的,編譯器往往會給乙個空類隱含的加乙個位元組,這樣空類在例項化後在記憶體得到了獨一無二的位址。------《深度探索c++物件模型》

二、用new與不用new建立物件的區別

記憶體分配有三種方式:

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

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

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

起初剛學c 時,很不習慣用new,後來看老外的程式,發現幾乎都是使用new,想一想區別也不是太大,但是在大一點的專案設計中,有時候不使用new的確會帶來很多問題。當然這都是跟new的用法有關的。new建立類物件,使用完後需使用delete刪除,跟申請記憶體類似。所以,new有時候又不太適合,比如在頻...

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

起初剛學c 時,很不習慣用new,後來看老外的程式,發現幾乎都是使用new,想一想區別也不是太大,但是在大一點的專案設計中,有時候不使用new的確會帶來很多問題。當然這都是跟new的用法有關的。new建立類物件,使用完後需使用delete刪除,跟申請記憶體類似。所以,new有時候又不太適合,比如在頻...