C 通过指向其基类的指针删除派生对象

c++ Deleting a derived object via a pointer to its base class

本文关键字:指针 删除 派生 对象 基类      更新时间:2023-10-16

在这种情况下:

class a1 {
   public:
     virtual ~a1(){}  
     int i;
};
class a2 : public a1 {
   public:
     int i2;
};
int main() {
   a1* aa2 = new a2; 
   delete aa2;
}

如果我删除AA2,那么A2上的所有存储器都是免费的?这些类内部没有任何动态分配的数据。

是的,由于虚拟破坏者,所有内存都是免费的。A2的破坏者将称为A1的破坏者。

第一个将被称为A2的破坏者,因为虚拟函数表将包含其地址,因为分配了A2类型的对象。

首先更正确地删除操作员将调用A2的击退器,然后调用将释放内存的删除函数。