仮想デストラクタを使用するタイミングと理由について、少し混乱しています。
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() は仮想ですか?