置空指標呼叫成員函式問題
阿新 • • 發佈:2019-02-15
問題由來:new一個自己的類,用完後delete指標,置空NULL 後,打斷點指標為空,但是依舊可以調用出類裡的函式,且編譯通 過了;
總結:在java,Python語言中是做不到這樣的,但是C++中可以,原因是其繫結方式不一樣;
java,python是動態繫結,也就是說,程式碼實現的時候是用到什麼找什麼,比如用到成員函數了,才會通過類物件去查詢其函式;
C++是靜態繫結,為了提高編譯效率,程式執行前就編譯好了。到了用的時候直接拿來用;
個人理解:在C++裡,new出來一個類的指標物件,那麼首先這塊記憶體就確定了型別為所new類的型別,無論自己delete還是置空NULL,操作的都是記憶體裡的值,這塊記憶體的型別是不會變得,所以,指標可以反覆利用,new出來一個物件,還可以再new一個;
MainView *p = new MainView();
p = new MainView();
但是由於指標p的型別固定了,所以不能用p再去new別的型別:
p = new View();
對於類的成員變數是類物件的屬性,但是對於沒有用到類成員變數的函式來說,成員函式就相當於只是寫在類裡的函式,用的時候,用型別名呼叫就行。(沒有用到成員變數)
在C++中成員變數是動態繫結,函式是靜態繫結,