2014-01-19 138 views
1

假設我有一個繼承自另一個類的類,並且我創建了一個從基類指向派生類對象的指針。現在,如果基類析構函數被定義爲虛擬的,那麼它不會產生任何問題。但是,在我的情況下,基類析構函數沒有聲明爲虛擬的,所以當我刪除這個指針時,它會導致內存泄漏。如何從基類中調用非虛擬的析構函數?

如何在不修改基類代碼的情況下克服這個問題?

+0

顯示更多的代碼。特別是,顯示破壞數據的代碼(不清楚它是否是你的)。 –

+0

你可以嘗試使用組合而不是繼承。 – soon

回答

2

假設你的意思是你有Base*類型的指針(不具有虛析構函數),指向Derived類型的反對,並要刪除該

處理這種情況的一種簡單方法是使用智能指針,例如std::shared_ptr,它記住原始(靜態已知)對象類型並將其應用於刪除。

更一般地,不要使用明確的delete:將其留給智能指針和容器對象。

1

您可以將基類強制轉換爲派生並調用delete。

相關問題