我对何时以及为什么使用虚拟析构函数有些困惑。
class Q {
private:
int i;
int *pi;
int *p;
public:
Q(int k);
print();
~Q() {delete pi; delete p;}
};
class DQ : public Q
{
private:
int *pd;
public:
DQ();
~DQ();
};
我明白,如果我主要分配一个
Q *p = new DQ();
并删除 p,然后只调用 Q 的析构函数。
但是在每种情况下会发生什么:
- 只有 ~Q() 是虚拟的,而 ~DQ() 不是?
- 只有 ~DQ() 是虚拟的,而 ~Q() 不是?
- ~Q() 是虚拟的,而 ~DQ() 是虚拟的?