#include <iostream>
#include <cstdlib>
#include <memory>
class MyInt
{
private:
int val;
public:
MyInt() : val(0) { std::cout << "default c'tor called" << std::endl; }
MyInt(int rhs) : val(rhs) { std::cout << "c'tor (" << rhs << ") called" << std::endl; }
~MyInt() { std::cout << "d'tor called" << std::endl; }
int getval (void) { return val; }
};
int main()
{
std::shared_ptr<MyInt> pt = std::make_shared<MyInt>(3);
MyInt* pt2 = pt.get();
std::cout << "reference count " << pt.use_count() << std::endl;
pt = 0;
std::cout << pt2->getval() << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPG1lbW9yeT4KCmNsYXNzIE15SW50CnsKcHJpdmF0ZToKICAgaW50IHZhbDsKCnB1YmxpYzoKICAgTXlJbnQoKSA6IHZhbCgwKSAgICAgICAgICB7IHN0ZDo6Y291dCA8PCAiZGVmYXVsdCBjJ3RvciBjYWxsZWQiIDw8IHN0ZDo6ZW5kbDsgfQogICBNeUludChpbnQgcmhzKSA6IHZhbChyaHMpIHsgc3RkOjpjb3V0IDw8ICJjJ3RvciAoIiA8PCByaHMgPDwgIikgY2FsbGVkIiA8PCBzdGQ6OmVuZGw7IH0KICAgfk15SW50KCkgICAgICAgICAgICAgICAgICB7IHN0ZDo6Y291dCA8PCAiZCd0b3IgY2FsbGVkIiA8PCBzdGQ6OmVuZGw7IH0KICAgaW50IGdldHZhbCAodm9pZCkgICAgICAgICB7IHJldHVybiB2YWw7IH0KfTsKCmludCBtYWluKCkKewogICBzdGQ6OnNoYXJlZF9wdHI8TXlJbnQ+IHB0ID0gc3RkOjptYWtlX3NoYXJlZDxNeUludD4oMyk7CgogICBNeUludCogcHQyID0gcHQuZ2V0KCk7CgogICBzdGQ6OmNvdXQgPDwgInJlZmVyZW5jZSBjb3VudCAiIDw8IHB0LnVzZV9jb3VudCgpIDw8IHN0ZDo6ZW5kbDsKCiAgIHB0ID0gMDsKCiAgIHN0ZDo6Y291dCA8PCBwdDItPmdldHZhbCgpIDw8IHN0ZDo6ZW5kbDsKfQ==