深度探索C++ 对象模型(2)-类的对象的内存大小_2
生活随笔
收集整理的這篇文章主要介紹了
深度探索C++ 对象模型(2)-类的对象的内存大小_2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
繼續上文,看看繼承類的大小
1. Bear類
類對象的大小為24: 16+8
class Bear : public ZooAnimal { public:Bear() {};~Bear() {}; void rotate() {};virtual void dance() {}; protected:enum Dances { }; Dances dances_known;int cell_block; };Bear b; ZooAnimal *pz = &b; Bear *pb = &b; Bear &rb = *pb;測試代碼:
void test_Bear() {cout << "Bear對象的內存大小:" << sizeof(Bear) << endl; }
2. Panda類
聲明對象
ZooAnimal za;ZooAnimal *pza;Bear b;Panda *pp = new Panda;...pza = &b; };對象的大小如下圖:
3. c++通過對象的refrence和指針來支持多態
-
更改對象的值:
Bear b;
ZooAnimal za = b; // 會引起切割 -
更改指針的值:
pz->cell_block; ? ? ? ? ? ?? ? ? ? ? ? ? // 不合法
((Bear*)pz)->cell_block; ? ? ? ? ? // 合法
dynamic_cast<Bear*>(pz)->cell_block; // 合法,效率更低
pb->cell_block; ? ? ? ? ? ? ? ? ? ? ? ? // 合法
總結 :對象和指針的真正意思是它的內存大小(在地址固定的情況下)
【引用】
[1]<<深度探索C++ 對象模型 Inside The C++ Object Model >> Stanley B.Lippman 候捷 譯
[2] 代碼地址 https://github.com/thefistlei/cplusStudy.git
總結
以上是生活随笔為你收集整理的深度探索C++ 对象模型(2)-类的对象的内存大小_2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度探索C++ 对象模型(2)-类的对象
- 下一篇: 深度探索C++ 对象模型(3)-默认构造