3

这会起作用,还是会进行切片(即仅释放与 Base 对象占用的内存相对应的内存,而不是释放整个 Derived 对象):

Base* ptr = new Derived;
delete ptr;

如果没有,会这样吗?

delete static_cast<Derived*>(ptr);
4

2 回答 2

3

这将起作用。

通过基对象指针调用派生对象的方法,是多态性的基本原理之一。

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

于 2014-01-16T13:31:50.827 回答
0

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

于 2014-01-16T13:58:00.467 回答