#include <iostream>
class A {
public:
virtual ~A() {
std::cout << "A DESTRUCTOR" << std::endl;
}
};
class B : public A{
public:
virtual ~B() {
std::cout << "B DESTRUCTOR" << std::endl;
}
};
class C : public B{
public:
virtual ~C() {
std::cout << "C DESTRUCTOR" << std::endl;
}
};
int main(int argc, char** argv)
{
A * aPtr = new C(); // The cast here is not needed
C * cPtr = new C();
delete aPtr;
delete cPtr;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQSB7CnB1YmxpYzoKICB2aXJ0dWFsIH5BKCkgewogICAgc3RkOjpjb3V0IDw8ICJBIERFU1RSVUNUT1IiIDw8IHN0ZDo6ZW5kbDsKICB9Cn07CmNsYXNzIEIgOiBwdWJsaWMgQXsKcHVibGljOgogIHZpcnR1YWwgfkIoKSB7CiAgICBzdGQ6OmNvdXQgPDwgIkIgREVTVFJVQ1RPUiIgPDwgc3RkOjplbmRsOwogIH0KfTsKY2xhc3MgQyA6IHB1YmxpYyBCewpwdWJsaWM6CiAgdmlydHVhbCB+QygpIHsKICAgIHN0ZDo6Y291dCA8PCAiQyBERVNUUlVDVE9SIiA8PCBzdGQ6OmVuZGw7CiAgfQp9OwoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQp7CiAgQSAqIGFQdHIgPSBuZXcgQygpOyAvLyBUaGUgY2FzdCBoZXJlIGlzIG5vdCBuZWVkZWQKICBDICogY1B0ciA9IG5ldyBDKCk7CgogIGRlbGV0ZSBhUHRyOwogIGRlbGV0ZSBjUHRyOwogIHJldHVybiAwOwp9