這個工作或將要進行切片(即只有與Base對象佔用的內存相對應的內存將被釋放,而不是整個Derived對象):刪除指向Derived對象的基指針
Base* ptr = new Derived;
delete ptr;
如果沒有,這是否?
delete static_cast<Derived*>(ptr);
這個工作或將要進行切片(即只有與Base對象佔用的內存相對應的內存將被釋放,而不是整個Derived對象):刪除指向Derived對象的基指針
Base* ptr = new Derived;
delete ptr;
如果沒有,這是否?
delete static_cast<Derived*>(ptr);
這將工作。
通過基礎對象指針調用派生對象的方法是多態基礎之一。
但是,請確保基類析構函數是虛擬的,以便正確地銷燬對象。
是的,它是。我只是有點累,我想:)謝謝。 – d7samurai
不客氣;) –
這不是一個對象切片。當您將派生對象轉換爲基礎對象時,會發生對象切片。您正在操作指針。你總是可以使基類析構函數虛擬化,以確保按照與創建相反的順序刪除對象。
如果'Base'的析構函數是'virtual',那麼一切都會好起來的。如果情況並非如此,編譯器很可能會提醒您。 – arne
啊,當然.. – d7samurai
http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors –