關於父類指標指向子類陣列的問題

2021-10-23 11:04:23 字數 326 閱讀 8137

b* pb = new d[3];		b為父類,d為子類

delete pb;

其實這個問題的原理很簡單,delete就是釋放堆上物件,它刪除乙個物件的時候,從指標pb開始,到sizeof(b)結束,記住,這時候是sizeof(b),呼叫b的析構函式,b的析構函式是虛函式,根據多型性,就先呼叫d的析構函式,再呼叫b的析構函式。

刪除1個物件或者陣列的第1個物件都沒有問題,但刪除第2個物件就麻煩了,delete第2個物件,就是從2*sizeof(b)開始刪除,但是sizeof(b) != sizeof(d),於是截斷d物件,結果不能正確呼叫析構函式,發生錯誤。

關於C 的子類指標指向父類

1,直接用基類指標引用基類物件 2,直接用派生類指標引用派生類物件 3,用基類指標引用乙個派生類物件,由於派生類物件也是基類的物件,所以這種引用是安全的,但是只能引用基類成員。若試圖通過基類指標引用那些只在派生類中才有的成員,編譯器會報告語法錯誤。解決該問題的答案是虛函式和多型性 4,用派生類指標引...

關於C 的子類指標指向父類

1,直接用基類指標引用基類物件 2,直接用派生類指標引用派生類物件 3,用基類指標引用乙個派生類物件,由於派生類物件也是基類的物件,所以這種引用是安全的,但是只能引用基類成員。若試圖通過基類指標引用那些只在派生類中才有的成員,編譯器會報告語法錯誤。解決該問題的答案是虛函式和多型性 4,用派生類指標引...

關於C 的子類指標指向父類

基類指標引用派生類物件 用基類指標引用乙個派生類物件,由於派生類物件也是基類的物件,所以這種引用是安全的 但是只能引用基類成員。若試圖通過基類指標引用那些只在派生類中才有的成員,編譯器會報告語法錯誤。解決該問題的答案是虛函式和多型性?這個說法不正確吧 派生類指標引用基類的物件 用派生類指標引用基類的...