1-對(duì)象模型:關(guān)于vptr和vtbl
無論類中有多少個(gè)虛函數(shù)千所,只有一個(gè)vptr藏姐,vptr指向vtbl,vtbl不占用對(duì)象空間。
vtbl可視為一個(gè)數(shù)組犯建,vtbl中儲(chǔ)存著虛函數(shù)的指針姻锁。
2-對(duì)象模型:關(guān)于this
this指針是每個(gè)成員函數(shù)的隱藏參數(shù)嫩痰。
3-對(duì)象模型:關(guān)于Dynamic Binding
pa->vfunc1()
等價(jià)于(*(p->vptr)[n])(p)
或者(* p->vptr[n])(p)
4-談?wù)刢onst
1睹限、const member function
return_type funcname cosnt (parameters)
{
//保證不修改成員變量
//在某些情況下,若return_type為引用且返回的為成員變量拾弃,則可能導(dǎo)致成員變量值桩,使得const修飾符失效
}
2、const object
當(dāng)函數(shù)的const與non-const版本同時(shí)存在時(shí)豪椿,const object只會(huì)調(diào)用const版本奔坟,non-const object只會(huì)調(diào)用non-const版本
5-關(guān)于New,Delete
Xxx* x = new Xxx()
中的new為表達(dá)式,其不可改變砂碉,而對(duì)new的重載蛀蜜,則是該表達(dá)式經(jīng)編譯器轉(zhuǎn)化為
void* mem = operator new(sizeof(Xxx));
x = static_cast<Xxx*>mem;
x->Xxx::Xxx();
中的operator new。delete與new相似增蹭。
new操作符在C++中,實(shí)際上是通過malloc函數(shù)來實(shí)現(xiàn)磅摹。delete操作符則是通過free函數(shù)實(shí)現(xiàn)滋迈。
6-重載Operator new,Operator delete
size_z是在重載new操作符時(shí)所規(guī)定的第一個(gè)參數(shù),不必傳入户誓,是重載函數(shù)的規(guī)定饼灿。
7-示例
8-重載new[],delete[]示例
9-Basic_String使用new(extra)擴(kuò)充申請(qǐng)量