是否可以使用空物件指標呼叫成員函式及訪問成員變數

2022-08-23 14:03:11 字數 1143 閱讀 8079

最近在查cwnd::getsafehwnd()函式時,順帶發現了乙個關於cwnd::getsafehwnd()的實現過程的討論,其中討論過程涉及到了空指標呼叫成員函式的問題,恰巧之前工作專案中也有偶遇到相關的知識,因此在此總結一下相關知識。

空物件指標(null)可以正常呼叫成員函式, 並正常返回值

空物件指標(null)呼叫成員函式時,如果訪問物件的成員變數,會崩潰

空物件指標(null)呼叫類的虛函式會崩潰

對於包含虛函式的類,其每個物件指標都含有乙個隱藏的成員變數,虛函式表指標vfptr

類宣告:

class cstringhelper

;

類實現:

#include "stringhelper.h"

int cstringhelper::ms_ncommvar = 100;

cstringhelper::cstringhelper()

cstringhelper::~cstringhelper()

int cstringhelper::donothing()

void cstringhelper::setstringflag()

int cstringhelper::dovirtualfunc()

空物件指標(null)可以正常呼叫成員函式, 並正常返回值
cstringhelper *pstringhelper = null;

pstringhelper->donothing();

pstringhelper->setstringflag();

理論支撐

cstringhelper *pstringhelper = null;

pstringhelper->dovirtualfunc();

class cemptyclass

;

順帶一提,如果沒有虛函式,sizeof得到的值為1。

空指標可以呼叫成員函式?

有下面乙個簡單類 class a 用乙個空指標呼叫上面的fun函式 a pa null pa fun 講道理,空指標應當是 不可用 的,自然也不能呼叫其成員函式了,但是結果卻出乎意料地正確執行了 為什麼?其實,關鍵在於每個成員函式的this指標。其實,c 類的成員函式與傳統c的函式並沒有什麼不同,只...

C 中使用空物件指標呼叫成員函式

c 中,空指標是不能夠使用的,然後空物件指標有時候卻能夠呼叫成員函式。下面定義乙個簡單的類 12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 classtestcls intmain 空指針對test fun1和 test fun2的呼叫正常,對test fun...

空指標的成員函式呼叫

自 http hi.baidu.com sangwf blog item 0be10af482d0c46edcc47464.html 我一直認為技術是沒有止境的,不管你怎麼去學,總有你沒有掌握的地方。但是,人,是不能停下腳步的。今天在檢查乙個mfc程式,看到getsafehwnd函式,於是讓我想明白...