#include <iostream>
class Base
{
public:
Base(){}
virtual ~Base(){
std::cout << "deleting b" << std::endl;
finalize();
}
virtual void finalize()
{
std::cout << "called finalize in Base" << std::endl;
}
};
class A : public Base
{
public:
A(){}
~A(){}
void finalize(){std::cout << "called finalize in a" << std::endl;}
};
int main(int argc, char *argv[])
{
Base *b = new A;
delete b;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQmFzZQp7CnB1YmxpYzoKICAgIEJhc2UoKXt9CiAgICB2aXJ0dWFsIH5CYXNlKCl7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJkZWxldGluZyBiIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgZmluYWxpemUoKTsKICAgIH0KICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZSgpCiAgICB7CglzdGQ6OmNvdXQgPDwgImNhbGxlZCBmaW5hbGl6ZSBpbiBCYXNlIiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgpjbGFzcyBBIDogcHVibGljIEJhc2UKewpwdWJsaWM6CiAgIEEoKXt9CiAgIH5BKCl7fQogICB2b2lkIGZpbmFsaXplKCl7c3RkOjpjb3V0IDw8ICJjYWxsZWQgZmluYWxpemUgaW4gYSIgPDwgc3RkOjplbmRsO30KfTsKCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKICAgIEJhc2UgKmIgPSBuZXcgQTsKICAgIGRlbGV0ZSBiOwp9