2014-01-16 43 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

这不是一个对象切片。当您将派生对象转换为基础对象时,会发生对象切片。您正在操作指针。你总是可以使基类析构函数虚拟化,以确保按照与创建相反的顺序删除对象。