class Base {
public:
 Base() { printf("Base();\n"); }
 ~Base() { printf("~Base();\n"); }
};

class Derived : public Base {
public:
 Derived() { printf("Derived();\n"); }
 ~Derived() { printf("~Derived();\n"); }
};

int main() {
 Base * pBase = new Derived;
 delete pBase;
}

出力:
Base()
Derived()
~Base()

で正しい。~Derived() は呼ばれるはずがない
Base クラスのデストラクタが Derived クラスでオーバーライドされていないので、pBase が delete される時に呼ばれるのは Base クラスのデストラクタになる
オーバーライドするためには Base クラスのデストラクタを仮想化する必要がある