其他分享
首页 > 其他分享> > c – “删除”是否与多态性一起正常工作?

c – “删除”是否与多态性一起正常工作?

作者:互联网

参见英文答案 > Virtual destructor and undefined behavior                                    4个

BaseClass * p = new DerivedClass();
delete p;

我知道第二行将调用基类的析构函数,如果它没有虚拟析构函数和派生类的析构函数,如果它有,但会正确删除内存(让我们说BaseClass的对象占用8个字节的空间和DerivedClass的一个12 – 它将释放8或12个字节)并在任何一种情况下摆脱对象?

解决方法:

好吧,如果它有一个虚拟析构函数,当然会破坏对象并按预期释放内存.如果它没有虚拟析构函数,则行为未定义.

if the static type of the object to be deleted is different from its dynamic type, the static type shall be a base class of the dynamic type of the object to be deleted and the static type shall have a virtual destructor or the behavior is undefined.

因此,试图判断内存是否将被完全解除分配并没有任何意义.程序可以用内存做任何喜欢的事情.

标签:virtual-destructor,c
来源: https://codeday.me/bug/20190729/1567612.html