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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020-12-12(c++多维数组的反
- 下一篇: 2020-12-14(全局/静态对象的构