BaseClass * p = new DerivedClass();
delete p;
我知道如果基类没有虚拟析构函数,第二行将调用基类的析构函数;如果有,则第二行将调用派生类的析构函数,但会delete
正确释放内存(假设BaseClass
的对象占用8个字节的空间并且DerivedClass
是一个 12 - 它会释放 8 或 12 字节)并在任何一种情况下删除该对象吗?
那么如果它有一个virtual
析构函数,当然该对象将被销毁并按预期释放内存。如果它没有virtual
析构函数,行为未定义。
如果要删除的对象的静态类型与其动态类型不同,则静态类型应是要删除的对象的动态类型的基类,并且静态类型应具有虚拟析构函数,否则行为未定义。
因此,试图推断内存是否会被完全释放并没有任何意义。程序可以对内存做任何它喜欢做的事。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)