删除指向Derived对象的Base指针

时间:2014-01-16 13:27:43

标签: c++ memory-management casting polymorphism object-slicing

这是否有效,或者是否会有切片(即只释放与Base对象占用的内存相对应的内存,而不是整个Derived对象):

Base* ptr = new Derived;
delete ptr;

如果没有,这会吗?

delete static_cast<Derived*>(ptr);

2 个答案:

答案 0 :(得分:3)

这样可行。

通过基础对象指针调用派生对象的方法是多态基础之一。

但是,请确保基类析构函数是虚拟的,以正确地破坏对象。

答案 1 :(得分:0)

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