#include <iostream>
struct Base
{
virtual ~Base(){}
virtual void Print() const
{
std::cout << "Base" << std::endl;
}
};
struct Derived : Base
{
virtual ~Derived(){}
virtual void Print() const
{
std::cout << "Derived" << std::endl;
}
};
int main()
{
Base *r1 = new Base;
Base *r2 = new Derived;
r1->Print();
r2->Print();
r1->~Base();
r2->~Base();
new ((void*)r1) Derived;
new ((void*)r2) Base;
r1->Print();
r2->Print();
delete r1;
delete r2;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEJhc2UKewogICAgdmlydHVhbCB+QmFzZSgpe30KICAgIHZpcnR1YWwgdm9pZCBQcmludCgpIGNvbnN0CiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJCYXNlIiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgpzdHJ1Y3QgRGVyaXZlZCA6IEJhc2UKewogICAgdmlydHVhbCB+RGVyaXZlZCgpe30KICAgIHZpcnR1YWwgdm9pZCBQcmludCgpIGNvbnN0CiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJEZXJpdmVkIiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgppbnQgbWFpbigpCnsKICAgIEJhc2UgKnIxID0gbmV3IEJhc2U7CiAgICBCYXNlICpyMiA9IG5ldyBEZXJpdmVkOwoKICAgIHIxLT5QcmludCgpOwogICAgcjItPlByaW50KCk7CgogICAgcjEtPn5CYXNlKCk7CiAgICByMi0+fkJhc2UoKTsKICAgIG5ldyAoKHZvaWQqKXIxKSBEZXJpdmVkOwogICAgbmV3ICgodm9pZCopcjIpIEJhc2U7CgogICAgcjEtPlByaW50KCk7CiAgICByMi0+UHJpbnQoKTsKICAgIAogICAgZGVsZXRlIHIxOwogICAgZGVsZXRlIHIyOwp9Cg==