如果基类没有虚拟析构函数(例如为了避免 vtable 条目)并且派生类只有基本属性,那么当基类的指针被删除时,它是否会释放 new 分配的所有内存?我知道派生类的析构函数不会被调用,但我想知道整个对象分配的内存是否会被释放?我还假设在派生指针上调用删除将释放整个内存空间。
另外,如果它不释放派生类的内存部分,那么在相同的情况下,它如何使用基类中的虚拟析构函数来知道要释放多少内存?
例子:
class Base {
public:
int a;
int b;
Base() {}
~Base() {}
};
class Derived : public Base {
public:
int c;
int d;
Derived() {}
~Derived() {}
};
int main() {
Base *p = new Derived();
delete p; // is memory allocated for Derived freed?
}
Run Code Online (Sandbox Code Playgroud)