#include <iostream>
using std::cout;
using std::endl;
#include <memory>
struct Base {
Base() { cout << "b" << endl; }
virtual ~Base() { cout << "~b" << endl; }
};
struct Derived : Base {
Derived() { cout << "d" << endl; }
~Derived() { cout << "~d" << endl; }
};
int main() {
std::shared_ptr<Base> pB;
{
std::shared_ptr<Derived> pD(new Derived);
pB = pD;
cout << "End of Block" << endl;
}
cout << "End of Main" << endl;
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgc3RkOjpjb3V0Owp1c2luZyBzdGQ6OmVuZGw7CgojaW5jbHVkZSA8bWVtb3J5PgoKc3RydWN0IEJhc2UgewogICBCYXNlKCkgeyBjb3V0IDw8ICJiIiA8PCBlbmRsOyB9CiAgIHZpcnR1YWwgfkJhc2UoKSB7IGNvdXQgPDwgIn5iIiA8PCBlbmRsOyB9Cn07CgpzdHJ1Y3QgRGVyaXZlZCA6IEJhc2UgewogICBEZXJpdmVkKCkgeyBjb3V0IDw8ICJkIiA8PCBlbmRsOyB9CiAgIH5EZXJpdmVkKCkgeyBjb3V0IDw8ICJ+ZCIgPDwgZW5kbDsgfQp9OwoKaW50IG1haW4oKSB7CiAgIHN0ZDo6c2hhcmVkX3B0cjxCYXNlPiBwQjsKICAgewogICAgIHN0ZDo6c2hhcmVkX3B0cjxEZXJpdmVkPiBwRChuZXcgRGVyaXZlZCk7CiAgICAgcEIgPSBwRDsKICAgICBjb3V0IDw8ICJFbmQgb2YgQmxvY2siIDw8IGVuZGw7CiAgIH0KICAgY291dCA8PCAiRW5kIG9mIE1haW4iIDw8IGVuZGw7Cn0K