#include <iostream>
using namespace std;
class c1 {};
class c2 : public c1 {};
class c3 : public c1 {};
class c4 : public c2, public c3 {};
int main() {
c4 *x1 = new c4;
c3 *x2 = x1;
delete x2; // segmentation fault
}
嗨,我想了解類型轉換和繼承,我發現這個問題。我有一個指向最派生的類,並指定(隱式)中間任何類,同時刪除,我認爲它應該能夠刪除第一個新分配的空間。在一些編譯器中,它看起來很好,但在linux gcc 4.7.2版(Debian 4.7.2-5)中,它給出了分段錯誤。無法弄清楚,爲什麼?任何幫助/指針/建議將不勝感激。分段錯誤刪除指針
注 - 類是以鑽石問題的形式派生的。
你應該在c3中實現虛擬析構函數。 – Zefick
這不是鑽石問題,因爲沒有虛擬繼承。 c4類實際上有兩個c1實例。 – Zefick
謝謝。我正在閱讀更多關於虛擬析構函數的用法。 –