2014-01-16 75 views
3

這個工作或將要進行切片(即只有與Base對象佔用的內存相對應的內存將被釋放,而不是整個Derived對象):刪除指向Derived對象的基指針

Base* ptr = new Derived; 
delete ptr; 

如果沒有,這是否?

delete static_cast<Derived*>(ptr); 
+4

如果'Base'的析構函數是'virtual',那麼一切都會好起來的。如果情況並非如此,編譯器很可能會提醒您。 – arne

+0

啊,當然.. – d7samurai

+3

http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors –

回答

3

這將工作。

通過基礎對象指針調用派生對象的方法是多態基礎之一。

但是,請確保基類析構函數是虛擬的,以便正確地銷燬對象。

+0

是的,它是。我只是有點累,我想:)謝謝。 – d7samurai

+0

不客氣;) –

0

這不是一個對象切片。當您將派生對象轉換爲基礎對象時,會發生對象切片。您正在操作指針。你總是可以使基類析構函數虛擬化,以確保按照與創建相反的順序刪除對象。