虛函式的執行機制

2021-08-08 22:15:16 字數 653 閱讀 2572

每個含有虛函式的類都含有乙個虛函式表,該虛函式表被所有類物件所共享。類的每個虛成員佔據虛函式表中的一行。如果類中有n個虛函式,那麼其虛函式表將有n*4位元組的大小。虛函式(virtual function)是通過乙個虛函式表(virtual table )來實現的,虛函式表裡儲存的是每個虛函式的位址。

虛函式表主要是乙個虛函式查詢表,主要是在執行時根據指標物件或者引用物件的型別呼叫相應的虛函式。虛函式表其實是儲存了為類物件進行宣告的虛函式位址。當我們建立乙個類物件時,編譯器會自動的生成乙個指標*__vptr(乙個隱藏指標),該指標指向這個類中所有虛函式的位址表。(實際上,虛函式表就是乙個函式位址陣列表。),請注意,*__vptr和*this指標不同,*this是乙個被編譯器用作解決自引用的函式引數,而*__vptr則是乙個真正的指標。每乙個類,不管是基類還是子類都有乙個自己的virtual table,*__vptr也是被繼承過來的。

class a 

virtual

void bar (void) {}

};class b : public a

};int main()

**如下:

JS 函式執行機制

形成乙個私有的作用域 形參賦值 變數提公升,函式宣告 執行 棧記憶體釋放與否 1 像普通函式一樣形成乙個私有作用域 棧記憶體 2 建構函式執行獨有 在js 自上而下執行之前,首先在當前形成的私有棧中建立乙個物件 建立乙個堆記憶體,暫時不儲存任何東西 並且讓函式中的執行主體 this 指向這個新的堆記...

session執行機制

session機制是一種伺服器端的機制,伺服器使用一種類似於雜湊表 的結構 也可能就是使用 雜湊表 來儲存資訊。當程式需要為某個客戶端的請求建立乙個session的時候,伺服器首先檢查這個客戶端的請求裡是否已包含了乙個session標識 稱為sessionid,如果已包含乙個sessionid則說明...

try catch finally執行機制

finally的執行 如下的程式所示,注釋中是執行的順序 public class test public static string test finally public static string test1 finally其實是僅在return 語句執行前執行,如果return 乙個函式,那...