#include <iostream>
#include <memory>
using namespace std;
class A
{
public:
A(int i) : m_i(i) {}
int geti() { return m_i; }
private:
int m_i;
};
int main() {
auto a = std::make_shared<A>(123);
auto b = a;
std::cout << a->geti() << std::endl;
std::cout << b->geti() << std::endl;
b = nullptr; //use b.reset(); instead
std::cout << a->geti() << std::endl; // This still works
//std::cout << b->geti() << std::endl; // This will crash
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQQp7CnB1YmxpYzoKCUEoaW50IGkpIDogbV9pKGkpIHt9CglpbnQgZ2V0aSgpIHsgcmV0dXJuIG1faTsgfQoKcHJpdmF0ZToKCWludCBtX2k7Cn07CgppbnQgbWFpbigpIHsKCWF1dG8gYSA9IHN0ZDo6bWFrZV9zaGFyZWQ8QT4oMTIzKTsKCWF1dG8gYiA9IGE7CglzdGQ6OmNvdXQgPDwgYS0+Z2V0aSgpIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCBiLT5nZXRpKCkgPDwgc3RkOjplbmRsOwoJYiA9IG51bGxwdHI7IC8vdXNlIGIucmVzZXQoKTsgaW5zdGVhZAoJc3RkOjpjb3V0IDw8IGEtPmdldGkoKSA8PCBzdGQ6OmVuZGw7IC8vIFRoaXMgc3RpbGwgd29ya3MKCS8vc3RkOjpjb3V0IDw8IGItPmdldGkoKSA8PCBzdGQ6OmVuZGw7IC8vIFRoaXMgd2lsbCBjcmFzaAoJcmV0dXJuIDA7Cn0=