#include <iostream>
#include <memory>
int main()
{
std::weak_ptr<int> weakPtr;
auto deleter = [&](int* targetPtr)
{
std::cout
<< "- Can we restore a shared pointer in its deleter?\n"
<< "- " << (weakPtr.lock().get() ? "Yes." : "No.") << std::endl;
delete targetPtr;
};
std::shared_ptr<int> sharedPtr(new int(), deleter);
weakPtr = sharedPtr;
std::cout
<< "- Has the shared pointer been created?\n"
<< "- " << (weakPtr.lock().get() ? "Yes." : "No.") << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKaW50IG1haW4oKSAKewoJc3RkOjp3ZWFrX3B0cjxpbnQ+IHdlYWtQdHI7CglhdXRvIGRlbGV0ZXIgPSBbJl0oaW50KiB0YXJnZXRQdHIpIAoJewoJCXN0ZDo6Y291dCAKCQkJPDwgIi0gQ2FuIHdlIHJlc3RvcmUgYSBzaGFyZWQgcG9pbnRlciBpbiBpdHMgZGVsZXRlcj9cbiIKCQkJPDwgIi0gIiA8PCAod2Vha1B0ci5sb2NrKCkuZ2V0KCkgPyAiWWVzLiIgOiAiTm8uIikgPDwgc3RkOjplbmRsOwoJCWRlbGV0ZSB0YXJnZXRQdHI7Cgl9OwoJc3RkOjpzaGFyZWRfcHRyPGludD4gc2hhcmVkUHRyKG5ldyBpbnQoKSwgZGVsZXRlcik7Cgl3ZWFrUHRyID0gc2hhcmVkUHRyOwoJc3RkOjpjb3V0IAoJCTw8ICItIEhhcyB0aGUgc2hhcmVkIHBvaW50ZXIgYmVlbiBjcmVhdGVkP1xuIgoJCTw8ICItICIgPDwgKHdlYWtQdHIubG9jaygpLmdldCgpID8gIlllcy4iIDogIk5vLiIpIDw8IHN0ZDo6ZW5kbDsKfQ==