聯編就是將模組或者函式合併在一起生成可執行**的處理過程,同時對每個模組或者函式呼叫分配記憶體位址,並且對外部訪問也分配正確的記憶體位址,它是電腦程式彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法:靜態聯編和動態聯編。
靜態聯編是指在編譯階段就將函式實現和函式呼叫關聯起來,因此靜態聯編也叫早繫結,在編譯階段就必須了解所有的函式或模組執行所需要檢測的資訊,它對函式的選擇是基於指向物件的指標(或者引用)的型別,c語言中,所有的聯編都是靜態聯編,據我所知道的,任何一種編譯器都支援靜態聯編(廢話)。
動態聯編是指在程式執行的時候才將函式實現和函式呼叫關聯,因此也叫執行時繫結或者晚繫結,動態聯編對函式的選擇不是基於指標或者引用,而是基於物件型別,不同的物件型別將做出不同的編譯結果。c++中一般情況下聯編也是靜態聯編,但是一旦涉及到多型和虛函式就必須要使用動態聯編了。
以上內容引用自
請看下面的程式:
#include using namespace std;class a
{public:
a(){ cout<
這時候就需要用到動態聯編了,也就是要用到虛函式。虛函式則是在程式執行時,根據其物件型別來呼叫相應的函式。請看下面的程式:
#include using namespace std;
class a
{public:
a(){ cout<
這說明,在test2執行後,delete pa時,是根據pa實際指向的物件來呼叫析構函式的,也就是呼叫b的析構函式。但是b是繼承a的,故在呼叫b的析構函式後,會再去呼叫其父類即a類的析構函式。test1函式的執行過程充分說明了繼承中建構函式和析構函式的呼叫順序。這也恰好驗證了test2函式中檢驗虛析構函式的功效。
使用虛析構函式,及時釋放資源,防止記憶體洩露。但是在沒有涉及到多型的時候可以不使用虛析構函式,畢竟任何虛函式都是要以類維護乙個vtable和vtable指標為代價的。
C 析構函式 虛析構函式
1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...
C 虛析構函式 純虛析構函式
虛析構函式 析構函式的工作方式是 最底層的派生類 most derived class 的析構函式最先被呼叫,然後呼叫每乙個基類的析構函式。因為在c 中,當乙個派生類物件通過使用乙個基類指標刪除,而這個基類有乙個非虛的析構函式,則結果是未定義的。執行時比較有代表性的後果是物件的派生部分不會被銷毀。然...