1. 程式人生 > >置空指標呼叫成員函式問題

置空指標呼叫成員函式問題

問題由來: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++中成員變數是動態繫結,函式是靜態繫結,