要使用多型特性時,基類析構函式需要加上virtual關鍵字,呼叫對基類指標的delete時才會發生動態繫結,使派生類的析構函式也能夠被呼叫到,否則只呼叫的基類的析構函式,沒有呼叫派生類的析構函式,導致記憶體洩漏。
基類析構函式宣告virtual不是必需的,若確定不需要使用到基類指標指向派生類的多型特性(但是可能會給協作**的人帶來坑),繼承的類不需要將析構函式加上virtual。
另一種防止記憶體洩漏方法是把基類的析構函式放在protected的許可權裡面:
#include using namespace std;
class base
protected:
~base()
};class son_base :public base
~son_base()
};void testbase()
int main()
上述**只有派生類指標指向派生類的例項才能正確的申請和釋放,這種方法同樣可以實現在派生類函式內呼叫基類函式,但是不能通過呼叫基類指標指向派生類例項的方法實現多型。 對C 析構函式的簡單理解
被同學問到這樣乙個問題 下面這段程式執行的時候,沒有執行析構函式?class test int main 問題出在system pause 這裡。在c 中如果定義了物件,並且物件中定義了變數等,那麼程式執行的時候就會給它分配記憶體,如果不手動銷毀的話,物件會一直存在的,這些記憶體會一直被占用,這是乙...
對C 中虛擬析構函式預設覆蓋的理解
走讀webrtc的 能看到各種風格的 比如析構函式就有很多種,看到圖1的寫法還是可以理解的,但是圖2就些疑惑了。rtpsenderbase類在定義時用到了另一種析構函式宣告的方式 基類的析構函式通常必須是虛擬的,但是派生類的析構函式呢?在c 11中,使用關鍵字 override 和 default ...
c 中建構函式及析構函式特性
一 在c 中,關於建構函式有以下幾點說明 1 建構函式最重要的作用是建立物件本身。2 c 規定,每個類必須有乙個建構函式,沒有建構函式,則無法建立物件。3 c 規定,如果乙個類沒有提供任何的建構函式,那麼c 編譯器會提供乙個預設的建構函式,且這個預設的建構函式是不帶引數的建構函式,它只負責物件的建立...