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

2021-07-25 14:29:51 字數 693 閱讀 2908

有下面乙個簡單類:

class

a};

用乙個空指標呼叫上面的fun函式:

a* pa =

null;

pa->fun();

講道理,空指標應當是」不可用」的,自然也不能呼叫其成員函式了,但是結果卻出乎意料地正確執行了:

為什麼??其實,關鍵在於每個成員函式的this指標。

其實,c++類的成員函式與傳統c的函式並沒有什麼不同,只是成員函式的第1個引數必須是this指標,只是這個引數是由編譯器自動加上去的,呼叫時也不需要顯示傳遞。

所以,上面的class a的成員函式fun的本質其實是這樣子的:

void fun(a* this){

cout

<< "i'm class a"

而呼叫是其實這樣子的:

a* pa =null;

fun(pa);

可以看到,雖然this指標實參為null,但是fun函式根本沒有用到this指標啊,this在這裡只是打了個醬油而已!

但是,如果在成員函式中使用的成員變數,就不可避免要使用到this指標,若是這樣,就不可避免的出現崩潰了。

綜上所述:即便物件指標為null,只要成員函式沒有使用非靜態成員函式,就可以正常呼叫該成員函式。

空指標的成員函式呼叫

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

空指標的成員函式呼叫

指標為null了,函式還能呼叫嗎?於是寫了乙個簡單的程式來做測試,如下 class a 測試發現,程式能夠正常執行。把p賦乙個非空值如p a 123 同樣如此。於是想搞明白這到底是怎麼一回事。雖然以前明白類成員函式中其實是隱藏了乙個this指標,但不同的例項在呼叫函式時是如何工作的,還不是很清楚。通...

C 空指標呼叫成員函式

如果在c 裡用空指標呼叫成員函式會發生什麼情況呢?以下面類為例 class a void geta void seta int x virtual void test 首先我們用空指標p去呼叫成員方法show 發現是可以成功呼叫的 呼叫geta 發現程式可以編譯成功,但執行失敗,並返回了乙個錯誤碼 ...