NPS*_*NPS 3 c++ virtual-destructor
BaseClass * p = new DerivedClass();
delete p;
Run Code Online (Sandbox Code Playgroud)
我知道第二行将调用基类的析构函数,如果它没有虚拟析构函数和派生类的析构函数,如果它有,但会delete正确释放内存(让我们说BaseClass's对象占用8个字节的空间,DerivedClass一个12 - 它会释放8或12个字节)并在任何一种情况下摆脱对象?
好吧,如果它有一个virtual析构函数,当然会破坏对象,并按预期释放内存.如果它没有virtual析构函数,则行为未定义.
如果要删除的对象的静态类型与其动态类型不同,则静态类型应为要删除的对象的动态类型的基类,静态类型应具有虚拟析构函数或行为未定义.
因此,试图判断内存是否将被完全解除分配并没有任何意义.该程序可以随心所欲地做任何事情.
| 归档时间: |
|
| 查看次数: |
2751 次 |
| 最近记录: |