#include <iostream>
using namespace std;
struct Base
{
~Base() { cout << "~Base\n"; };
};
struct Derived: public Base
{
~Derived() { cout << "~Derived\n"; };
};
struct BaseV
{
virtual ~BaseV() { cout << "~BaseV\n"; };
};
struct DerivedV: public BaseV
{
~DerivedV() { cout << "~DerivedV\n"; };
};
int main()
{
Base * b = new Derived;
delete b;
BaseV * v = new DerivedV;
delete v;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEJhc2UKewogICAgfkJhc2UoKSB7IGNvdXQgPDwgIn5CYXNlXG4iOyB9Owp9OwoKc3RydWN0IERlcml2ZWQ6IHB1YmxpYyBCYXNlCnsKICAgIH5EZXJpdmVkKCkgIHsgY291dCA8PCAifkRlcml2ZWRcbiI7IH07Cn07CgpzdHJ1Y3QgQmFzZVYKewogICAgdmlydHVhbCB+QmFzZVYoKSB7IGNvdXQgPDwgIn5CYXNlVlxuIjsgfTsKfTsKCnN0cnVjdCBEZXJpdmVkVjogcHVibGljIEJhc2VWCnsKICAgIH5EZXJpdmVkVigpICB7IGNvdXQgPDwgIn5EZXJpdmVkVlxuIjsgfTsKfTsKCgppbnQgbWFpbigpCnsKICAgIEJhc2UgKiBiID0gbmV3IERlcml2ZWQ7CiAgICBkZWxldGUgYjsKCiAgICBCYXNlViAqIHYgPSBuZXcgRGVyaXZlZFY7CiAgICBkZWxldGUgdjsKfQoJCgoK