日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C++编程笔记:C++用new与不用new创建对象的区别

發(fā)布時間:2025/3/15 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++编程笔记:C++用new与不用new创建对象的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、Alignment問題

重新發(fā)現(xiàn)這個問題是因為在體系結(jié)構課上提到的一個概念,alignment對齊的概念。

像上面這個C++的類,它有兩個變量。

或者直接算它的大小

然后按照道理,myclass的大小,應該是5 byte才對,可是最后輸出的結(jié)果是8,顯然這就說明系統(tǒng)在創(chuàng)建對象的時候,將對象的變量進行了對齊操作,不足4 byte的按照4 byte補足。

2.1 虛函數(shù)引起的空間占用:虛函數(shù)管理

此外,普通成員函數(shù)不會占用對象空間的大小,也不會影響sizeof的結(jié)果。

而如果是虛函數(shù)就會占用空間了。

結(jié)果是占用12 byte的大小。

這種的差別是由于c++的類所有的虛函數(shù)都是由一個虛函數(shù)指針所管理,它的虛函數(shù)被放在別的內(nèi)存空間中管理。而普通函數(shù)是由this指針所管理,this指針并不是對象本身的一部分,所以不會影響到sizeof的結(jié)果。

2.2 一些有趣的現(xiàn)象

(1)空類的sizeof為1

(2)只有一個char的類的大小為1

(3)當有一個為char,另一個是虛函數(shù)或者int類型成員變量,會出現(xiàn)對齊現(xiàn)象,大小為8。對齊現(xiàn)象很有意思,它的規(guī)則是:以最長的變量長度為對齊長度

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

在分析完各種情況之后,只有第一個的結(jié)果顯得特別詭異,為什么空類的大小不是0,而是1?

每個類的實例,在內(nèi)存中都有一個獨一無二的地址,為了達到這個目的,編譯器往往會給一個空類隱含的加一個字節(jié),這樣空類在實例化后在內(nèi)存得到了獨一無二的地址。------《深度探索c++對象模型》

二、用new與不用new創(chuàng)建對象的區(qū)別

內(nèi)存分配有三種方式:

(1)從靜態(tài)存儲區(qū)域分配,內(nèi)存在編譯期間就已經(jīng)分配好,這塊內(nèi)存在整個運行期間都存在,例如static變量。

(2)從棧上創(chuàng)建:函數(shù)內(nèi)局部變量,自動分配與回收,效率高,但是分配的內(nèi)存量有限。

(3)從堆上創(chuàng)建:由程序員控制,malloc、new,free、delete。

學習C/C++編程,提升自己的編程能力,歡迎關注博主的微信公眾號:C語言編程學習基地,一起來學習吧!

總結(jié)

以上是生活随笔為你收集整理的C++编程笔记:C++用new与不用new创建对象的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。