相关疑难解决方法(0)

整个对象是否通过非虚拟析构函数和基类指针释放?

如果基类没有虚拟析构函数(例如为了避免 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)

c++ destructor delete-operator

5
推荐指数
1
解决办法
442
查看次数

标签 统计

c++ ×1

delete-operator ×1

destructor ×1