struct A
{
  virtual ~A(){};
  virtual void release()=0;
};
struct B: A
{
  virtual ~B()
  {
    cout << "~B" << endl;
    release();
  }
  virtual void release()
  {
    cout << "B::release" << endl;
  }
};
struct C: B
{
  virtual void release()
  {
    cout << "C::release" << endl;
  }
};
int main()
{
  B* p = new C;
  p->release();
  delete p;
  return 0;
}
C::releaseが呼ばれてほしいーーーーーーーー