在这种情况下:
class a1 {
public:
virtual ~a1(){}
int i;
};
class a2 : public a1 {
public:
int i2;
};
int main() {
a1* aa2 = new a2;
delete aa2;
}
如果我删除aa2那么在a2上分配的所有内存都是免费的? 这些类内部没有动态分配的数据。
答案 0 :(得分:0)
是的,由于虚拟析构函数,所有内存都是免费的。 a2的析构函数将调用a1的析构函数。
第一个将被称为a2的析构函数,因为虚函数表将包含其地址,因为已分配了类型为a2的对象。
更准确地说,删除操作符首先会调用a2的析构函数,然后调用将释放内存的删除函数。