这是否有效,或者是否会有切片(即只释放与Base对象占用的内存相对应的内存,而不是整个Derived对象):
Base* ptr = new Derived;
delete ptr;
如果没有,这会吗?
delete static_cast<Derived*>(ptr);
答案 0 :(得分:3)
这样可行。
通过基础对象指针调用派生对象的方法是多态基础之一。
但是,请确保基类析构函数是虚拟的,以正确地破坏对象。
答案 1 :(得分:0)
这不是对象切片。将派生对象强制转换为基础对象时会发生对象切片。您正在操作指针。你总是可以创建基类析构函数virtual,以确保以与创建相反的顺序删除对象