指向類成員函數(shù)的指針其實(shí)并非指針
1、與常規(guī)指針不同,一個指向成員的指針并不指向一個具體的內(nèi)存位置,它指向的是一個類的特定成員,而不是指向特定對象里的特定成員。通常最清晰的做法,是將指向數(shù)據(jù)成員的指針看作為一個偏移量。
這個偏移量告訴你,一個特定成員的位置距離對象的起點(diǎn)有多少個字節(jié)。
2、給定一個成員在類內(nèi)的偏移量,為了訪問位于那個偏移量的數(shù)據(jù)成員,我們需要該類的一個對象的地址。這時候就需要 .*和->*的操作。pC->*pimC,請求將pC內(nèi)的地址加上pimC內(nèi)的偏移量,為的是訪問pC所指向的C對象中適當(dāng)?shù)臄?shù)據(jù)成員。aC.*pimC,請求aC的地址加上pimC中的偏離量,也是為了訪問pC所指向的C對象中適當(dāng)?shù)臄?shù)據(jù)成員。
Ps:
*成員指針解引用操作符(.*)從對象或引用獲取成員
*成員指針箭頭操作符(->*)通過對象的指針獲取成員
3、獲取非靜態(tài)成員函數(shù)的地址時,得到的不是一個地址,而是一個指向成員函數(shù)的指針。
4、為了對一個指向成員函數(shù)的指針進(jìn)行解引用,需要一個對象或一個指向?qū)ο蟮闹羔?。對于指向?shù)據(jù)成員的指針的情形,為了訪問該成員,需要將對象的地址和成員的偏移量相加。對于指向成員函數(shù)的指針的情形,需要將對象的地址用作this指針的值,進(jìn)行函數(shù)調(diào)用,以及作為其他用途。
5、一個指向成員函數(shù)的指針的實(shí)現(xiàn)自身必須存儲一些信息,諸如它所指向的成員函數(shù)是虛擬的還是非虛擬的,到哪里支找到的適當(dāng)?shù)奶摵瘮?shù)表指針等等。
6、另外補(bǔ)充一點(diǎn)關(guān)于指向內(nèi)聯(lián)函數(shù)的指針的問題。一個函數(shù)指針指向內(nèi)聯(lián)函數(shù)是合法的。然而,通過函數(shù)指針調(diào)用內(nèi)聯(lián)函數(shù)將不會導(dǎo)致內(nèi)聯(lián)式的函數(shù)調(diào)用,因?yàn)榫幾g器無法在編譯期精確地確定將會調(diào)用什么函數(shù)。因此在調(diào)用點(diǎn),編譯器別無他法,只好生成間接、非內(nèi)聯(lián)的函數(shù)調(diào)用代碼。

