將可能會被繼承的父類的析構函式設定為虛函式,可以保證當我們new乙個子類,然後使用基類指標指向該子類物件,釋放基類指標時可以釋放掉子類的空間,防止記憶體洩漏。
c++預設的析構函式不是虛函式是因為虛函式需要額外的虛函式表和虛表指標,占用額外的記憶體。而對於不會被繼承的類來說,其析構函式如果是虛函式,就會浪費記憶體。因此c++預設的析構函式不是虛函式,而是只有當需要當作父類時,設定為虛函式。
靜態函式在編譯的時候就已經確定執行時機,虛函式在執行的時候動態繫結。虛函式因為用了虛函式表機制,呼叫的時候會增加一次記憶體開銷。
__attribute
((constructor)
)void
before()
子類若重寫父類虛函式,虛函式表中,該函式的位址會被替換,對於存在虛函式的類的物件,在vs中,物件的物件模型的頭部存放指向虛函式表的指標,通過該機制實現多型。
生成乙個臨時變數,把它的引用作為函式引數傳入函式內。
虛函式和多型(析構函式)
描述 1.定義乙個類animal,該類中包含資料成員name用來記錄動物的名字,並有乙個虛函式show用於顯示動物的種類。2 定義兩個類cat和dog,都繼承自animal 包含show函式,不但要顯示動物的種類 型別分別 為 cat,dog 還要顯示動物的名字。3 定義乙個tiger類,繼承自ca...
建構函式 析構函式 虛析構函式
說析構函式之前,先說下建構函式。建構函式用來完成對物件的一系列初始化操作,主要作用有 1.給建立的物件建立乙個識別符號 2.為物件資料成員開闢記憶體空間 3.完成物件資料成員的初始化 當並未顯示的定義建構函式時,會生成乙個預設的建構函式,預設建構函式不能完成物件資料成員的初始化,只能給物件建立一識別...
虛函式 析構函式
1.第一段 include using namespace std class clxbase clxbase void dosomething class clxderived public clxbase clxderived void dosomething int main 執行結果 do ...