深度探索C++對象模型讀書筆記(一)
《深度探索C++對象模型》這本書也算是學習C++面向對象編程的必備書了,打算花上幾天先簡單的看一遍,這種書看上好幾遍也不一定能理解太多,慢慢積累一點一滴吃透就好。下面把我看書過程中覺得比較有意義的摘錄下來,也算是一種總結了。
第一章 關於對象
第一章首先談到了C++在C的基礎上增加對象封裝之後所需要的一些成本,總結一下就是面向對象設計的C++在結構的封裝上並不比C復雜太多,每個object中也只包含了data member,member function並不會包含在對象實體之中,面向對象特性所產生的布局以及時間上的額外負擔主要由virtual引起,以下是原文敘述:
C++對象模型
C++對象模型如下圖所示,所需要註意的就是每個存在虛函數的類都會有一個vtbl虛函數表數據結構,表中存在該類所有虛函數的地址指針,還存在該類的type_info 作為RTTI信息。類中所有的static成員全部分配在object之外。
關鍵詞struct和class
書中關於這兩個關鍵詞講了很多,有點繁雜了,在我看來記住以下幾點就差不多了:
1.struct和class關鍵詞並沒有太多差距,都能夠用來組裝數據結構,最顯著的區別就是struct內成員默認訪問權限為public,而class的默認訪問權限是private
2.struct和class更多的是C語言結構體和C++類兩種數據組裝理念的區別,前者只有數據,而後者把數據和方法進行了組合。
3.struct在C語言中存在許多trick,特別是其成員內存分配總是順序的,這使得我們能夠很方便的通過轉換指針類型對其成員實現訪問。而C++由於存在virtual機制的存在,其Object中的成員內存分配順序不定,在這方面的使用需要慎重。
C++多態的實現
C++對象內存的真正分配
主要有三部分:
1.非靜態數據成員
2.內存對齊所需空間,見另一篇文章https://www.cnblogs.com/J1ac/p/9039955.html
3.虛函數實現多態的開銷,一般指虛函數指針
深度探索C++對象模型讀書筆記(一)