關於C++物件的成員變數的佈局問題

hs-wu發表於2013-10-18

(1)   同一個access section中,較晚出現的members在classobject中有較高的地址,各個members並不一定得連續排列,什麼東西可能介於兩個members之間?--比如members的邊界調整。

 

(2)   C++ Standard允許編譯器將多個access section之中的datamembers自由排列,不必在乎它們出現在class宣告之中的次序,不過一般都是把一個以上的access  section連鎖在一起,依照宣告的次序,成為一個連續區塊。

 

 

(3)   編譯器可能合成一些內部使用的data members,比如vptr,vptr會被放在什麼位置?

C++  Standard秉承對於佈局所持的放任態度,允許編譯器把那些內部產生出來的members自由放在任何位置,可以放在開頭或者最後,甚至是程式設計師宣告出來的members之間。(92頁)

 

(4)    C++繼承模型中,一個derived class object所表現出來的東西,是其自己的members加上其base class members的總和,至於derived class members和base class members的排列次序並未在C++ Starand中強制規定,大部分編譯器中,base class總是先出現,但是屬於virtual base class的除外,基類後出現

相關文章