深度探索c++物件模型讀書筆記 三
c++深度探索《三》
1.空的class是1個位元組 大家看一下這個程式:
#include
using namespace std;
class demo
;int main()
;class device:public dest
;int main()
{cout<<「sizeof(dest):」《每乙個static data member只有乙個實體,存放在程式data segment中,每次取用static member,就會被內部轉化成對該唯一的extern實體的直接參考。
static變數大家都很熟悉了,就不做過多的的闡述了,有上面這段話,會更好理解一些。
3.c++物件模型中的問題
提出這麼問題:
point3d origin;
origin.x = 0.0;
point3d *pt = &origin;
pt->x = 0.0
這兩種訪問的差異。其實,大家也都知道,一種是利用物件訪問成員資料,另外一種是用指標來訪問資料。其實,c++物件模型中想要說明的是:假設point3d是乙個子類,繼承與虛基類的成員函式,此時pt就不知道指向哪個型別了,需要等到執行期間才知道。但是origin是可以的,即使繼承與虛基類,但是資料成員在編譯期就固定了,資料成員的偏移也就確定了。
4.繼承的空間布局 看一下這段**:
#include
using namespace std;
《深度探索C 物件模型》讀書筆記(5)
純虛函式 在設計抽象基類時,需要注意以下幾點 1 不要將destructor宣告為pure virtual function 如果將destructor宣告為pure virtual function,則設計者一定得定義它。因為每乙個derived class destructor會被編譯器加以擴充...
《深度探索C 物件模型》讀書筆記(6)
物件的構造和解構 一般而言,我們會把object盡可能放置在使用它的那個程式區段附近,這樣做可以節省不必要的物件產生操作和銷毀操作。全域性物件 全域性物件的靜態初始化策略包括以下幾個步驟 1 為每乙個需要靜態初始化的物件產生乙個 sti 函式,內含必要的constructor呼叫操作或inline ...
讀書筆記 《深度探索c 物件模型》 (3)
第四章 function語意學 4.2 虛擬成員函式 a 單一繼承下的virtual function 乙個class只會有乙個virtual table 這個class自己定義的virtual function,它override了乙個可能存在的base class virtual functio...