通過基類指標delete,是否會造成記憶體洩漏

2021-10-01 03:45:26 字數 510 閱讀 1525

定義乙個基類a,乙個子類b繼承a,在類b裡有個成成員變數int。

當我用a的指標指向b類的時候,deletea的指標

問:b裡面的成員變數int會被釋放麼?

答:會因為,new和delete並不會記錄空間的大小,空間大小是由堆內部管理的。因為a和b的指標指向的同乙個位址空間,當deletea的時候,堆會告訴a它指向的空間的大小(即類b的大小),直接釋放整個空間,所以b的成員變數也會被釋放掉。但是當b的成員變數是new出來的時候,就不會被釋放,因為不能遞迴找到這個成員變數指向的位址去釋放空間,只能把這個指標的空間釋放掉。同理,deleteb也不會釋放。只能手動去釋放。

class a

};class b : public a

int c;

};int main()

輸出

erase a
在上述**中,delete a 的時候也會把b類中的 int c 釋放掉。所以不會造成洩漏。

delete基類指標能不能釋放子類物件

include class a a class b public a b int main 執行結果 ab a基類析構函式加上virtual再試試 include class a virtual a class b public a b int main 執行結果 ab b a 如果基類的析構函式不...

基類父類指標

問 我們為什麼常常定義乙個基類的指標,去呼叫派生類的成員函式?答 利用多型 問 好處在 就是不用自己重寫一遍某些函式嗎 我的意思是為什麼不直接定義派生類的指標呢?答 呼叫的時候不需要知道pbase所指的具體派生類,只要呼叫就ok,這是oo的體現。這樣,使用pbase的指標就可以針對於不同的子類用相同...

關於基類指標 派生類指標 基類物件派 生類物件問題

1 基類指向派生類的指標 2 派生類指向基類的指標 3 以及將派生類指標強制轉換為基類指標 4 將基類指標強制轉換為派生類指標 無論是基類指向派生類還是派生類指向基類,重點就是哪個類的指標就呼叫哪個類的方法,而輸出的是指標指向的物件。基類指向派生類的指標即將派生類物件賦給基類指標,如果輸出的話,呼叫...