>>469
class A {
public:
 ~A() { cout << "~A" << endl; }
 void foo() { cout << "A" << endl; }
};

class B : public A {
public:
 virtual ~B() { cout << "~B" << endl; }
 virtual void foo() { cout << "B" << endl; }
};

class C : public B{
public:
 virtual ~C() { cout << "~C" << endl; }
 virtual void foo() { cout << "C" << endl; }
};

main() {
 A* a = new C; // 危険
 a->foo();
 delete a;

 B* b = new C;
 b->foo();
 delete b;
}

さて、何がどう呼ばれるでしょう?