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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++对象长度之空类(1)

發布時間:2025/3/21 c/c++ 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++对象长度之空类(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在c++中說起對象,大家是不是很熟悉?
對象嘛,new一個不就行了嘛,對吧?(這里不說malloc,malloc它不負責觸發構造函數,它也不是運算符,沒法重載)
但當我們提到對象大小的時候,大家對怎么計算呢?
是不是直接:
對象長度=sizeof(數據成員1)+sizeof(數據成員2)+sizeof(數據成員3)+sizeof(數據成員4)+…………sizeof(數據成員n)

是這樣對嘛?
那我們用這個公式驗證一下空對象的大小是不是應該為0呢?對吧?那我們來驗證一下

從表面上看,這個公式是并沒有任何問題的,但對象的大小遠遠沒有那么簡單哦。即使類中繼承和虛函數的定義,仍有三種特殊情況能推翻此公式:

a.空類

b.內存對齊

c.靜態數據成員

接下來請聽我詳細解釋:

空類

空類中沒有任何數據成員,按照該公式計算出的對象長度是0字節。類型長度為0,則此類的對象不占據內存空間。而實際情況是,空類的長度為1字節。如果對象完全不占據內存空間,那么空類就無法取得實例對象的地址,(每一個對象實例化都需要空間,這里系統默認給了一個占位符,占1字節大小)this指針失效,因此就不能實例化。而類的定義是由成員數據和成員函數組成,在沒有成員數據的情況下,還可以有成員函數,因此仍然需要實例化,分配了1字節的空間用于類的實例化,這1字節的數據并沒有被使用,當然這只是針對于c++中的類和結構體。

另外在c++中,一個空類和空結構體是占一個字節的空間的。但在c語言中,空結構體是不占空間的

總結

以上是生活随笔為你收集整理的c++对象长度之空类(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。