#include <iostream>
#include <memory>
using namespace std;
struct Test
{
};
int main() {
auto ptr = make_shared<Test>();
auto ptr2 = ptr;
weak_ptr<Test> wp = ptr;
std::cout << "Use count #1: " << ptr2.use_count() << std::endl;
std::cout << "Use count #1_wp: " << wp.use_count() << std::endl;
ptr.reset();
std::cout << "Use count #2: " << ptr2.use_count() << std::endl;
std::cout << "Use count #2_wp: " << wp.use_count() << std::endl;
std::cout << "Use count #2_lock: " << wp.lock().use_count() << std::endl;
ptr2.reset();
std::cout << "Use count #3_wp: " << wp.use_count() << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBUZXN0CnsKfTsKCmludCBtYWluKCkgewoJYXV0byBwdHIgPSBtYWtlX3NoYXJlZDxUZXN0PigpOwoJYXV0byBwdHIyID0gcHRyOwogICAgd2Vha19wdHI8VGVzdD4gd3AgPSBwdHI7CgkKCXN0ZDo6Y291dCA8PCAiVXNlIGNvdW50ICMxOiAiIDw8IHB0cjIudXNlX2NvdW50KCkgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0IDw8ICJVc2UgY291bnQgIzFfd3A6ICIgPDwgd3AudXNlX2NvdW50KCkgPDwgc3RkOjplbmRsOwoJcHRyLnJlc2V0KCk7CglzdGQ6OmNvdXQgPDwgIlVzZSBjb3VudCAjMjogIiA8PCBwdHIyLnVzZV9jb3VudCgpIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCAiVXNlIGNvdW50ICMyX3dwOiAiIDw8IHdwLnVzZV9jb3VudCgpIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCAiVXNlIGNvdW50ICMyX2xvY2s6ICIgPDwgd3AubG9jaygpLnVzZV9jb3VudCgpIDw8IHN0ZDo6ZW5kbDsKCXB0cjIucmVzZXQoKTsKCXN0ZDo6Y291dCA8PCAiVXNlIGNvdW50ICMzX3dwOiAiIDw8IHdwLnVzZV9jb3VudCgpIDw8IHN0ZDo6ZW5kbDsKCglyZXR1cm4gMDsKfQ==